/*
 * ! FusionCharts JavaScript Library Copyright FusionCharts Technologies LLP
 * @license License Information at <http://www.fusioncharts.com/license>
 *
 * @author FusionCharts
 *
 * @version 3.2.1-release
 *
 * Third-party attributions: SWFObject v2.2
 * <http://code.google.com/p/swfobject/> JSON v2 <http://www.JSON.org/js.html>
 * Firebug Lite 1.3.0 <http://getfirebug.com/firebuglite> jQuery 1.4.2
 * <http://jquery.com/>
 */
(function() {
  if (typeof window.FusionCharts !== 'undefined') {
    return
  }
  var f = {}, modules = {}, argsT = ['swfUrl', 'id', 'width', 'height',
      'debugMode', 'registerWithJS', 'bgColor', 'scaleMode', 'lang',
      'detectFlashVersion', 'autoInstallRedirect'];
  f.extend = function(a, b) {
    var c = typeof arguments[arguments.length - 1] === 'boolean'
        ? arguments[arguments.length - 1]
        : false;
    var d = b, snk = a;
    if (typeof b === 'boolean' || arguments.length === 1) {
      snk = f.core;
      d = a
    }
    if (c === true) {
      snk = snk.prototype
    }
    for (var e in d) {
      snk[e] = d[e]
    }
    return snk
  };
  f.uniqueId = function() {
    return 'chartobject-' + (f.uniqueId.lastId += 1)
  };
  f.uniqueId.lastId = 0;
  f.policies = {
    options : {
      product : ['product', 'v3'],
      insertMode : ['insertMode', 'replace'],
      safeMode : ['safeMode', true],
      overlayButton : ['overlayButton', undefined]
    },
    attributes : {
      lang : ['lang', 'EN'],
      'class' : ['className', 'FusionCharts']
    },
    width : ['width', '400'],
    height : ['height', '300'],
    src : ['swfUrl', ''],
    __state : {}
  };
  f.parsePolicies = function(a, b, c) {
    var d, policy, value;
    for (policy in b) {
      if (f.policies[policy] instanceof Array) {
        value = c[b[policy][0]];
        a[policy] = value === undefined ? b[policy][1] : value;
        continue
      }
      if (typeof a[policy] !== 'object') {
        a[policy] = {}
      }
      for (d in b[policy]) {
        value = c[b[policy][d][0]];
        a[policy][d] = value === undefined ? b[policy][d][1] : value
      }
    }
  };
  f.core = function(a) {
    if (!(this instanceof f.core)) {
      if (arguments.length === 1 && a instanceof Array && a[0] === 'private') {
        if (modules[a[1]] === true) {
          return undefined
        }
        modules[a[1]] = true;
        return f
      }
      if (arguments.length === 1 && typeof a === 'string') {
        return f.core.items[a]
      }
      f
          .raiseError(
              this,
              '25081840',
              'run',
              '',
              new SyntaxError("Use the \"new\" keyword while creating a new FusionCharts object"))
    }
    var b = {}, prop;
    if (arguments.length === 1 && typeof arguments[0] === 'object') {
      b = arguments[0]
    } else {
      for (prop in argsT) {
        b[argsT[prop]] = arguments[prop]
      }
    }
    if (typeof arguments[arguments.length - 1] === 'object') {
      delete b[arguments.length - 1];
      f.extend(b, arguments[arguments.length - 1])
    }
    this.id = typeof b.id === 'undefined' ? this.id = f.uniqueId() : b.id;
    this.args = b;
    if (f.core.items[this.id] instanceof f.core) {
      this.id = f.uniqueId();
      f.raiseWarning(this, '06091847', 'param', '',
          'A FusionChart oject with the specified id \"' + this.id
              + '\" already exists. Renaming it to ' + this.id)
    }
    f.parsePolicies(this, f.policies, b);
    this.resizeTo(b.width, b.height, true);
    f.raiseEvent('BeforeInitialize', b, this);
    f.core.items[this.id] = this;
    f.raiseEvent('Initialized', b, this);
    return this
  };
  f.core.prototype = {};
  f.core.prototype.constructor = f.core;
  f.extend({
        id : 'FusionCharts',
        version : [3, 2, 1, 'release', 1750],
        items : {},
        options : {},
        getObjectReference : function(a) {
          return f.core.items[a].ref
        }
      }, false);
  window.FusionCharts = f.core
}());
(function() {
  var f = FusionCharts(['private', 'EventManager']);
  if (f === undefined) {
    return
  }
  window.FusionChartsEvents = {
    BeforeInitialize : 'beforeinitialize',
    Initialized : 'initialized',
    Loaded : 'loaded',
    Rendered : 'rendered',
    DataLoadRequested : 'dataloadrequested',
    DataLoadRequestCancelled : 'dataloadrequestcancelled',
    DataLoadRequestCompleted : 'dataloadrequestcompleted',
    BeforeDataUpdate : 'beforedataupdate',
    DataUpdateCancelled : 'dataupdatecancelled',
    DataUpdated : 'dataupdated',
    DataLoadCancelled : 'dataloadcancelled',
    DataLoaded : 'dataloaded',
    DataLoadError : 'dataloaderror',
    NoDataToDisplay : 'nodatatodisplay',
    DataXMLInvalid : 'dataxmlinvalid',
    InvalidDataError : 'invaliddataerror',
    DrawComplete : 'drawcomplete',
    Resized : 'resized',
    BeforeDispose : 'beforedispose',
    Disposed : 'disposed'
  };
  var g = function(a, b, c, d) {
    try {
      a[0].call(b, c, d || {})
    } catch (e) {
      setTimeout(function() {
            throw e;
          }, 0)
    }
  };
  var h = function(a, b, c) {
    if (!(a instanceof Array)) {
      return
    }
    var i = 0, scope;
    for (; i < a.length; i += 1) {
      if (a[i][1] === b.sender || a[i][1] === undefined) {
        scope = a[i][1] === b.sender ? b.sender : f.core;
        g(a[i], scope, b, c)
      }
      if (b.cancel === true) {
        break
      }
    }
  };
  var j = {
    listeners : {},
    lastEventId : 0,
    addListener : function(a, b, c) {
      if (a instanceof Array) {
        for (var i = 0; i < a.length; i += 1) {
          j.addListener(a[i], b, c)
        }
        return
      }
      if (typeof a !== 'string') {
        f.raiseError(this, '03091549', 'param', '::EventTarget.addListener',
            new Error('Unspecified Event Type'));
        return
      }
      if (typeof b !== 'function') {
        f.raiseError(this, '03091550', 'param', '::EventTarget.addListener',
            new Error('Invalid Event Listener'));
        return
      }
      a = a.toLowerCase();
      if (!(j.listeners[a] instanceof Array)) {
        j.listeners[a] = []
      }
      j.listeners[a].push([b, c])
    },
    removeListener : function(a, b, c) {
      var i;
      if (a instanceof Array) {
        for (i = 0; i < a.length; i += 1) {
          j.removeListener(a[i], b, c)
        }
        return
      }
      if (typeof a !== 'string') {
        f.raiseError(this, '03091559', 'param', '::EventTarget.removeListener',
            new Error('Unspecified Event Type'));
        return
      }
      if (typeof b !== 'function') {
        f.raiseError(this, '03091560', 'param', '::EventTarget.removeListener',
            new Error('Invalid Event Listener'));
        return
      }
      a = a.toLowerCase();
      var d = j.listeners[a];
      if (!(d instanceof Array)) {
        return
      }
      for (i = 0; i < d.length; i += 1) {
        if (d[i][0] === b && d[i][1] === c) {
          d.splice(i, 1);
          i -= 1
        }
      }
    },
    triggerEvent : function(a, b, c) {
      if (typeof a !== 'string') {
        f.raiseError(this, '03091602', 'param', '::EventTarget.dispatchEvent',
            new Error('Invalid Event Type'));
        return undefined
      }
      a = a.toLowerCase();
      var d = {
        eventType : a,
        eventId : (j.lastEventId += 1),
        sender : (typeof b === 'string' ? f.core.items[b] : b),
        stopPropagation : function() {
          return (this.cancel = true) === false
        }
      };
      h(j.listeners[a], d, c);
      h(j.listeners['*'], d, c);
      return true
    }
  };
  f.raiseEvent = function(a, b, c) {
    return j.triggerEvent(a, (c === undefined ? f.core : c), b)
  };
  f.addEventListener = function(a, b) {
    return j.addListener(a, b)
  };
  f.removeEventListener = function(a, b) {
    return j.removeListener(a, b)
  };
  f.extend({
        addEventListener : f.addEventListener,
        removeEventListener : f.removeEventListener
      }, false);
  f.extend({
        addEventListener : function(a, b) {
          return j.addListener(a, b, this)
        },
        removeEventListener : function(a, b) {
          return j.removeListener(a, b, this)
        }
      }, true);
  f.addEventListener('BeforeDispose', function(e) {
        var a, i;
        for (a in j.listeners) {
          for (i = 0; i < j.listeners[a].length; i += 1) {
            if (j.listeners[a][i][1] === e.sender) {
              j.listeners[a].splice(i, 1)
            }
          }
        }
      })
}());
(function() {
  var i = FusionCharts(['private', 'ErrorHandler']);
  if (i === undefined) {
    return
  }
  var j = 'text';
  var k = {
    type : 'TypeException',
    range : 'ValueRangeException',
    impl : 'NotImplementedException',
    param : 'ParameterException',
    run : 'RuntimeException',
    comp : 'DesignTimeError',
    'undefined' : 'UnspecifiedException'
  };
  var l = function(a, b, c, d, e, f) {
    var g = '#' + b + ' ' + a.id + d + ' ' + f + ' >> ';
    if (e instanceof Error) {
      e.name = k[c];
      e.module = 'FusionCharts' + d;
      e.level = f;
      e.message = g + e.message;
      g = e.message;
      window.setTimeout(function() {
            throw e;
          }, 0)
    } else {
      g = g + e
    }
    var h = {
      id : b,
      nature : k[c],
      source : 'FusionCharts' + d,
      message : g
    };
    i.raiseEvent(f, h, a);
    if (typeof window['FC_' + f] === 'function') {
      window['FC_' + f](h)
    }
  };
  i.raiseError = function(a, b, c, d, e) {
    l(a, b, c, d, e, 'Error')
  };
  i.raiseWarning = function(a, b, c, d, e) {
    l(a, b, c, d, e, 'Warning')
  };
  var m = {
    outputHelpers : {
      'text' : function(e, a) {
        var b = (e.sender.id || e.sender).toString();
        m.outputTo('#'
            + e.eventId
            + ' ['
            + b
            + '] fired "'
            + e.eventType
            + '" event. '
            + (e.eventType === 'error' || e.eventType === 'warning'
                ? a.message
                : ''))
      },
      'event' : function(e, a) {
        this.outputTo(e, a)
      },
      'verbose' : function(e, a) {
        m.outputTo(e.eventId, e.sender.id, e.eventType, a)
      }
    },
    outputHandler : function(e, a) {
      if (typeof m.outputTo !== 'function') {
        i.core.debugMode.outputFailed = true;
        return
      }
      i.core.debugMode.outputFailed = false;
      m.currentOutputHelper(e, a)
    },
    currentOutputHelper : undefined,
    outputTo : undefined,
    enabled : false
  };
  m.currentOutputHelper = m.outputHelpers[j];
  i.extend({
        debugMode : {
          outputFormat : function(a) {
            if (a && typeof a.toLowerCase === 'function'
                && typeof m.outputHelpers[a = a.toLowerCase()] === 'function') {
              m.currentOutputHelper = m.outputHelpers[a];
              return true
            }
            return false
          },
          outputTo : function(a) {
            if (typeof a === 'function') {
              m.outputTo = a
            } else if (a === null) {
              i.core.debugMode.enabled(false);
              delete m.outputTo
            }
          },
          enabled : function(a, b, c) {
            if (typeof a === 'function') {
              if (typeof b === 'string' && arguments.length === 2) {
                c = b
              }
              b = a;
              a = true
            }
            if (typeof a === 'boolean' && a !== m.enabled) {
              i.core[(m.enabled = a)
                  ? 'addEventListener'
                  : 'removeEventListener']('*', m.outputHandler)
            }
            if (typeof b === 'function') {
              m.outputTo = b
            }
            i.core.debugMode.outputFormat(c);
            return m.enabled
          },
          _enableFirebugLite : function(a) {
            if (window.console && window.console.firebug) {
              i.core.debugMode.enabled(console.log, 'verbose');
              return
            }
            var b = document.createElement('script');
            b.type = 'text/javascript';
            b.src = typeof a === 'string' ? a : i.core.options.scriptBaseUri
                + 'firebug-lite.js';
            b['\v' === 'v' ? 'text' : 'innerHTML'] = '{ startOpened: true }';
            b.onload = function() {
              i.core.debugMode.enabled(console.log, 'verbose')
            };
            b.onreadystatechange = function() {
              if (this.readyState === 'complete'
                  || this.readyState === 'loaded') {
                i.core.debugMode.enabled(console.log, 'verbose')
              }
            };
            document.getElementsByTagName('head')[0].appendChild(b)
          }
        }
      }, false)
}());
(function() {
  var f = FusionCharts(['private', 'RendererManager']);
  if (f === undefined) {
    return
  }
  f.policies.options.containerElementId = ['renderAt', undefined];
  f.policies.options.renderer = ['renderer', undefined];
  var g = function() {
    f.raiseError(this, '25081845', 'run', '::RendererManager',
        new Error('No active renderer'));
    return
  };
  var h = {
    'undefined' : {
      render : g,
      update : g,
      resize : g,
      config : g,
      policies : {}
    }
  }, store = {};
  f.renderer = {
    register : function(a, b) {
      if (!a || typeof a.toString !== 'function') {
        throw "#03091436 ~renderer.register() Invalid value for renderer name.";
      }
      a = a.toString().toLowerCase();
      if (h[a] !== undefined) {
        f.raiseError(f.core, '03091438', 'param', '::RendererManager>register',
            'Duplicate renderer name specified in "name"');
        return false
      }
      h[a] = b;
      return true
    },
    setDefault : function(a) {
      if (!a || typeof a.toString !== 'function') {
        f.raiseError(f.core, '25081731', 'param',
            '::RendererManager>setDefault',
            'Invalid renderer name specified in "name"');
        return false
      }
      if (h[a = a.toString().toLowerCase()] === undefined) {
        f.raiseError(f.core, '25081733', 'range',
            '::RendererManager>setDefault',
            'The specified renderer does not exist.');
        return false
      }
      f.policies.options.renderer = ['renderer', a];
      return true
    },
    getRenderer : function(a) {
      return h[a]
    },
    getRendererPolicy : function(a) {
      var b = h[a].policies;
      return typeof b === 'object' ? b : {}
    },
    currentRendererName : function() {
      return f.policies.options.renderer[1]
    },
    update : function(a) {
      store[a.id].update.apply(a, Array.prototype.slice.call(arguments, 1))
    },
    render : function(a) {
      store[a.id].render.apply(a, Array.prototype.slice.call(arguments, 1))
    },
    resize : function(a) {
      store[a.id].resize.apply(a, Array.prototype.slice.call(arguments, 1))
    },
    config : function(a) {
      store[a.id].config.apply(a, Array.prototype.slice.call(arguments, 1))
    }
  };
  var j = function(a) {
    return function() {
      if (this.ref === undefined || this.ref === null
          || typeof this.ref[a] !== 'function') {
        f
            .raiseError(this, '25081617', 'run', '~' + a + '()',
                'ExternalInterface call failed. Check whether chart has been rendered.');
        return undefined
      }
      return this.ref[a].apply(this.ref, arguments)
    }
  };
  f.addEventListener('BeforeInitialize', function(a) {
        var b = a.sender;
        if (typeof b.options.renderer === 'string'
            && h[b.options.renderer.toLowerCase()] === undefined) {
          b.options.renderer = f.policies.options.renderer[1]
        }
        b.options.renderer = b.options.renderer.toLowerCase();
        store[b.id] = h[b.options.renderer];
        if (store[b.id].initialized !== true
            && typeof store[b.id].init === 'function') {
          store[b.id].init();
          store[b.id].initialized = true
        }
        f.parsePolicies(b, store[b.id].policies || {}, b.args);
        for (var c in store[b.id].prototype) {
          b[c] = store[b.id].prototype[c]
        }
      });
  f.addEventListener('Loaded', function(e) {
        var a = e.sender, chartObj = e.sender.ref;
        if (a instanceof f.core) {
          delete a.__state.rendering
        }
        if (chartObj === undefined || chartObj === null
            || typeof chartObj.getExternalInterfaceMethods !== 'function') {
          return
        }
        var b = chartObj.getExternalInterfaceMethods().split(','), i;
        for (i = 0; i < b.length; i += 1) {
          if (a[b[i]] === undefined) {
            a[b[i]] = j(b[i])
          }
        }
      });
  var k = function(a, b) {
    var c = document.getElementById(a), containerId = b.getAttribute('id');
    if (c === null) {
      return false
    }
    if (a === containerId) {
      return true
    }
    var d = b.getElementsByTagName('*');
    for (var i = 0; i < d.length; i += 1) {
      if (d[i] === c) {
        return false
      }
    }
    return true
  };
  var l = function(a) {
    if (a.success === false) {
      f.raiseError(f.core.items[a.id], '25081850', 'run', '::RendererManager',
          new Error('There was an error rendering the chart. '
              + 'Enable FusionCharts JS debugMode for more information.'))
    }
    f.core.items[a.id].ref = a.ref;
    if (a.ref) {
      a.ref.FusionCharts = f.core.items[a.id]
    }
    f.raiseEvent('internal.DOMElementCreated', a, f.core.items[a.id])
  };
  f.extend({
    render : function(a) {
      if (window[this.id] !== undefined) {
        f.raiseError(this, '25081843', 'comp', '.render',
            new Error('#25081843:IECompatibility() Chart '
                + 'Id is same as a JavaScript variable name. Variable naming '
                + 'error. Please use unique name for chart JS variable, '
                + 'chart-id and container id.'))
      }
      var b = document.createElement('span');
      if (a === undefined) {
        a = this.options.containerElementId
      }
      if (typeof a === 'string') {
        a = document.getElementById(a)
      }
      if (a === undefined || a === null) {
        f.raiseError(this, '03091456', 'run', '.render()',
            new Error("Unable to find the container DOM element."));
        return this
      }
      if (k(this.id, a)) {
        f
            .raiseError(
                this,
                '05102109',
                'run',
                '.render()',
                new Error("A duplicate object already exists with the specific Id: "
                    + this.id));
        return this
      }
      b.setAttribute('id', this.id);
      if (this.options.insertMode === 'replace') {
        while (a.hasChildNodes()) {
          a.removeChild(a.firstChild)
        }
      }
      a.appendChild(b);
      this.options.containerElement = a;
      this.options.containerElementId = a.id;
      this.__state.rendering = true;
      f.renderer.render(this, a, l);
      return this
    },
    configure : function(b, c) {
      f.renderer.config(this, (typeof b === 'object') ? b : (function() {
            var a = {};
            a[b] = c;
            return a
          }()))
    }
  }, true);
  f.extend({
        setCurrentRenderer : f.renderer.setDefault,
        render : function() {
          var a = ['swfUrl', 'id', 'width', 'height', 'renderAt', 'dataSource',
              'dataFormat'], params = {}, i;
          if (arguments[0] instanceof f.core) {
            arguments[0].render();
            return arguments[0]
          }
          for (i = 0; (i < arguments.length && i < a.length); i += 1) {
            params[a[i]] = arguments[i]
          }
          if (typeof arguments[arguments.length - 1] === 'object') {
            delete params[a[i - 1]];
            f.extend(params, arguments[arguments.length - 1])
          }
          if (params.dataFormat === undefined) {
            params.dataFormat = FusionChartsDataFormats.XMLURL
          }
          return new f.core(params).render()
        }
      }, false)
}());
(function() {
  var g = FusionCharts(['private', 'DataHandlerManager']);
  if (g === undefined) {
    return
  }
  window.FusionChartsDataFormats = {};
  g.ajax = (function() {
    var c = function(a, x, e, b) {
      if (typeof a.error === 'function') {
        b[1] = x;
        Array.prototype.push.call(b, e);
        a.error.apply(a, b)
      }
    };
    var d = {
      x : window.XMLHttpRequest
          && (window.location.protocol !== "file:" || !window.ActiveXObject)
          ? function() {
            return new window.XMLHttpRequest()
          }
          : function() {
            try {
              return new window.ActiveXObject("Microsoft.XMLHTTP")
            } catch (e) {
              throw "Charts cannot render due to lack of AJAX support. Use setDataURL for fallback";
            }
          },
      get : function(u, f) {
        var x = d.x(), args = arguments;
        x.onreadystatechange = function() {
          try {
            if (x.readyState === 4) {
              if (x.status === 200 || x.status === 0) {
                f(x.responseText, x)
              } else {
                c(d, x, new Error('XMLHttpRequest Error'), args)
              }
            }
          } catch (e) {
            c(d, x, e, args)
          }
        };
        try {
          if (x.overrideMimeType) {
            x.overrideMimeType('text/plain')
          }
          x.open('GET', u, true);
          x.setRequestHeader('If-Modified-Since',
              'Sat, 29 Oct 1994 19:43:31 GMT');
          x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
          x.setRequestHeader('Accept', 'text/plain, */*');
          x.send(null)
        } catch (e) {
          c(d, x, e, args)
        }
        return x
      }
    };
    return d
  }());
  g.ajax.error = function(a, x, b, c, e) {
    var d = {
      source : b,
      url : a,
      xmlHttpRequestObject : x,
      error : e,
      httpStatus : (x && x.status) ? x.status : -1
    };
    g.raiseEvent('DataLoadError', d, c);
    if (typeof window.FC_DataLoadError === 'function') {
      window.FC_DataLoadError(c.id, d)
    }
  };
  var h = {}, dataStore = {}, xStore = {}, cache = {}, isUrl = /url$/i;
  var i = function(a) {
    if (xStore[a] && typeof xStore[a].abort === 'function'
        && xStore[a].readyState && xStore[a].readyState !== 0) {
      xStore[a].abort();
      return true
    }
    return false
  };
  g.policies.options.dataSource = ['dataSource', undefined];
  g.policies.options.dataFormat = ['dataFormat', undefined];
  g.addDataHandler = function(b, c) {
    if (typeof b !== 'string' || h[b.toLowerCase()] !== undefined) {
      g.raiseError(g.core, '03091606', 'param', '::DataManager.addDataHandler',
          new Error('Invalid Data Handler Name'));
      return
    }
    var d = {}, lcaseName = b.toLowerCase();
    h[lcaseName] = c;
    d['set' + b + 'Url'] = function(a) {
      return this.setChartDataUrl(a, b)
    };
    d['set' + b + 'Data'] = function(a) {
      return this.setChartData(a, b)
    };
    d['get' + b + 'Data'] = function() {
      return this.getChartData(b)
    };
    window.FusionChartsDataFormats[b] = lcaseName;
    window.FusionChartsDataFormats[b + 'URL'] = lcaseName + 'URL';
    g.extend(d, true)
  };
  g.addEventListener('BeforeInitialize', function(a) {
        var b = a.sender;
        dataStore[b.id] = '';
        cache[b.id] = {};
        if (b.options.dataSource !== undefined
            && typeof b.options.dataFormat === 'string') {
          b.setChartData(b.options.dataSource, b.options.dataFormat)
        }
      });
  g.addEventListener('BeforeDispose', function(e) {
        delete dataStore[e.sender.id];
        delete cache[e.sender.id];
        i(e.sender.id)
      });
  g.extend({
        setChartDataUrl : function(c, d, e) {
          if (d === undefined || d === null || typeof d.toString !== 'function') {
            g.raiseError(g.core, '03091609', 'param', '.setChartDataUrl',
                new Error('Invalid Data Format'));
            return
          }
          d = d.toString().toLowerCase();
          var f, obj = this, cancelDLRFlag = false;
          if (isUrl.test(d)) {
            f = d.slice(0, -3)
          } else {
            f = d;
            d = d + 'url'
          }
          g.raiseEvent('DataLoadRequested', {
                source : 'XmlHttpRequest',
                url : c,
                dataFormat : f,
                cancelDataLoadRequest : function() {
                  cancelDLRFlag = true;
                  this.cancelDataLoadRequest = function() {
                    return false
                  };
                  return true
                }
              }, obj);
          if (cancelDLRFlag === true) {
            g.raiseEvent('DataLoadRequestCancelled', {
                  source : 'XmlHttpRequest',
                  url : c,
                  dataFormat : f
                }, obj);
            return
          }
          this.options.dataSource = c;
          xStore[this.id] = g.ajax.get(decodeURIComponent(c), function(a, x) {
                var b = false;
                g.raiseEvent('DataLoadRequestCompleted', {
                      source : 'XmlHttpRequest',
                      url : c,
                      data : a,
                      dataFormat : f,
                      cancelDataLoad : function() {
                        b = true;
                        this.cancelDataLoad = function() {
                          return false
                        };
                        return true
                      },
                      xmlHttpRequestObject : x
                    }, obj);
                if (b !== true) {
                  obj.setChartData(a, f, e)
                } else {
                  g.raiseEvent('DataLoadCancelled', {
                        source : 'XmlHttpRequest',
                        url : c,
                        dataFormat : f,
                        xmlHttpRequestObject : x
                      }, obj)
                }
                delete xStore[this.id]
              }, 'XmlHttpRequest', this)
        },
        setChartData : function(a, b, c) {
          if (b === undefined || b === null || typeof b.toString !== 'function') {
            g.raiseError(g.core, '03091610', 'param', '.setChartData',
                new Error('Invalid Data Format'))
          }
          b = b.toString().toLowerCase();
          var d;
          if (isUrl.test(b)) {
            this.setChartDataUrl(a, b, c);
            return
          } else {
            this.options.dataSource = a;
            d = b
          }
          this.options.dataFormat = b;
          var e = h[d], parseResult, eventArgs, cancelDUFlag = false;
          if (typeof e === 'undefined') {
            g.raiseError(g.core, '03091611', 'param', '.setChartData',
                new Error('Data Format not recognized'));
            return
          }
          parseResult = e.encode(a, this);
          parseResult.format = d;
          eventArgs = {
            dataFormat : d,
            dataSource : a,
            dataError : parseResult.error,
            data : parseResult.data,
            cancelDataUpdate : function() {
              cancelDUFlag = true;
              this.cancelDataUpdate = function() {
                return false
              };
              return true
            }
          };
          g.raiseEvent('BeforeDataUpdate', eventArgs, this);
          delete eventArgs.cancelDataUpdate;
          if (cancelDUFlag === true) {
            g.raiseEvent('DataUpdateCancelled', eventArgs, this);
            return
          }
          dataStore[this.id] = (parseResult.data = eventArgs.data) || '';
          cache[this.id] = {};
          if (c !== true) {
            if (this.options.safeMode === true
                && this.__state.rendering === true && !this.isActive()) {
              this.__state.updatePending = parseResult;
              g.raiseWarning(this, '23091255', 'run', '::DataHandler~update',
                  'Renderer update was postponed due to async loading.')
            } else {
              delete this.__state.updatePending;
              g.renderer.update(this, parseResult)
            }
          }
          g.raiseEvent('DataUpdated', eventArgs, this)
        },
        getChartData : function(a, b) {
          var c, parseResult;
          if (a === undefined || typeof a.toString !== 'function'
              || (c = h[a = a.toString().toLowerCase()]) === undefined) {
            g.raiseError(this, '25081543', 'param', '~getChartData()',
                new Error('Unrecognized data-format specified in "format"'));
            return undefined
          }
          parseResult = (typeof cache[this.id][a] === 'object')
              ? cache[this.id][a]
              : cache[this.id][a] = c.decode(dataStore[this.id], this);
          return Boolean(b) === true ? parseResult : parseResult.data
        }
      }, true);
  g.extend({
    transcodeData : function(a, b, c, d) {
      if (!b || typeof b.toString !== 'function' || !c
          || typeof c.toString !== 'function'
          || h[(c = c.toString().toLowerCase())] === undefined
          || h[(b = b.toString().toLowerCase())] === undefined) {
        g
            .raiseError(
                this,
                '14090217',
                'param',
                'transcodeData()',
                new Error('Unrecognized data-format specified during transcoding.'));
        return undefined
      }
      var e = h[b].encode(a, this), l2 = h[c].decode(e.data, this);
      if (!(l2.error instanceof Error)) {
        l2.error = e.error
      }
      return d ? l2 : l2.data
    }
  }, false);
  g.core.addEventListener('Disposed', function(e) {
        delete cache[e.sender.id]
      });
  g.core.addEventListener('Loaded', function(e) {
        var a = e.sender;
        if (a instanceof g.core && a.__state.updatePending !== undefined) {
          g.renderer.update(a, a.__state.updatePending);
          delete a.__state.updatePending
        }
      })
}());
(function() {
  var f = FusionCharts(['private', 'GenericRuntime']);
  if (f === undefined) {
    return
  }
  var g = /(fusioncharts\.js|fusioncharts\.debug\.js|fusioncharts\.core\.js|fusioncharts\.min\.js|fusioncharts\.packed\.js)(\?.*)?$/i;
  var j = {
    vled : 'realtimeverticalled'
  };
  f.core.options.scriptBaseUri = (function() {
    var a = document.getElementsByTagName('script'), l = a.length, scriptBaseUri = '', i;
    for (i = 0; i < l; i += 1) {
      if (g.test(a[i].getAttribute('src'))) {
        scriptBaseUri = a[i].getAttribute('src').split(g)[0];
        break
      }
    }
    return scriptBaseUri
  }());
  var k = function(a, b, c) {
    for (var d in a) {
      if (a[d] instanceof Array) {
        b[a[d][0]] = c[d];
        continue
      }
      for (var e in a[d]) {
        b[a[d][e][0]] = c[d][e]
      }
    }
  }, lengthCleanupRegex = /[^\%\d]*$/g, signatureMatchRegex = /^FusionCharts/;
  f.extend({
        dispose : function() {
          f.raiseEvent('BeforeDispose', {}, this);
          delete f.core.items[this.id];
          f.raiseEvent('Disposed', {}, this)
        },
        clone : function(a, b) {
          var c = f.extend({}, this.args);
          k(f.policies, c, this);
          k(f.renderer.getRendererPolicy(this.options.renderer), c, this);
          delete c.id;
          delete c.animate;
          delete c.stallLoad;
          if (typeof a === 'object') {
            f.extend(c, a)
          }
          return b ? c : new f.core(c)
        },
        setDataXML : function(a) {
          if (a === undefined || a === null || typeof a.toString !== 'function') {
            f.raiseError(this, '25081627', 'param', '~setDataXML',
                'Invalid data type for parameter "xml"');
            return
          }
          if (this.ref === undefined || this.ref === null
              || typeof this.ref.setDataXML !== 'function') {
            this.setChartData(a.toString(), FusionChartsDataFormats.XML)
          } else {
            this.ref.setDataXML(a.toString())
          }
        },
        setDataURL : function(a) {
          if (a === undefined || a === null || typeof a.toString !== 'function') {
            f.raiseError(this, '25081724', 'param', '~setDataURL',
                'Invalid data type for parameter "url"');
            return
          }
          if (this.ref === undefined || this.ref === null
              || typeof this.ref.setDataURL !== 'function') {
            this.setChartData(a.toString(), FusionChartsDataFormats.XMLURL)
          } else {
            this.ref.setDataURL(a.toString())
          }
        },
        isActive : function() {
          if (!this.ref || document.getElementById(this.id) !== this.ref
              || typeof this.ref.signature !== 'function') {
            return false
          }
          try {
            return signatureMatchRegex.test(this.ref.signature())
          } catch (e) {
            return false
          }
        },
        resizeTo : function(w, h, a) {
          var b = {
            width : w,
            height : h
          };
          if (typeof arguments[0] === 'object') {
            b.width = arguments[0].width;
            b.height = arguments[0].height;
            a = h
          }
          if (b.width && typeof b.width.toString === 'function') {
            this.width = b.width.toString().replace(lengthCleanupRegex, '')
          }
          if (b.height && typeof b.height.toString === 'function') {
            this.height = b.height.toString().replace(lengthCleanupRegex, '')
          }
          if (a !== true) {
            f.renderer.resize(this, b)
          }
        },
        chartType : function() {
          var a = this.src.substring(this.src.indexOf('.swf'), 0), file = a
              .substring(a.lastIndexOf('/') + 1).toLowerCase();
          return j[file] === undefined ? file : j[file]
        }
      }, true);
  window.getChartFromId = function(a) {
    return f.core.items[a] instanceof f.core
        ? f.core.items[a].ref
        : f.swfobject.getObjectById(a)
  };
  var m = function(a, b) {
    if (typeof a[b] === 'function') {
      return function() {
        return a[b].apply(a, arguments)
      }
    }
    return a[b]
  };
  f.addEventListener('internal.DOMElementCreated', function(a, b) {
        if (b.ref === undefined || b.success !== true) {
          return
        }
        var c = {
          options : true,
          vars : true,
          attributes : true,
          params : true,
          src : true,
          ref : true,
          constructor : true,
          setDataXML : true,
          setDataURL : true,
          hasRendered : true,
          getXML : true,
          getDataAsCSV : true,
          print : true,
          exportChart : true,
          signature : true,
          link : true
        };
        for (var d in a.sender) {
          if (c[d] === true || b.ref[d] !== undefined) {
            continue
          }
          try {
            b.ref[d] = m(a.sender, d)
          } catch (e) {
          }
        }
      })
}());
(function() {
  var d = FusionCharts(['private', 'DynamicChartAttributes']);
  if (d === undefined) {
    return
  }
  d.extend({
    setChartAttribute : function(a) {
      if (arguments.length > 1 && typeof a === 'string') {
        var b = arguments[0];
        a = {};
        a[b] = arguments[1]
      } else if (a === null || typeof a !== 'object') {
        return
      }
      var i = 0, json = this.getChartData(FusionChartsDataFormats.JSON), prop, attList = json.chart
          || json.graph || {};
      for (prop in a) {
        i += 1;
        attList[prop.toLowerCase()] = a[prop]
      }
      if (i > 0) {
        if (typeof attList.animation === 'undefined') {
          attList.animation = '0'
        }
        this.setChartData(json, FusionChartsDataFormats.JSON)
      }
    },
    getChartAttribute : function(a) {
      var b = (b = this.getChartData(FusionChartsDataFormats.JSON)).chart
          || b.graph;
      if (arguments.length === 0 || a === undefined || b === undefined) {
        return b
      }
      var c, i;
      if (typeof a === 'string') {
        c = b[a.toString().toLowerCase()]
      } else if (a instanceof Array) {
        c = {};
        for (i = 0; i < a.length; i += 1) {
          c[a[i]] = b[a[i].toString().toLowerCase()]
        }
      } else {
        d.raiseError(this, '25081429', 'param', '~getChartAttribute()',
            'Unexpected value of "attribute"')
      }
      return c
    }
  }, true)
}());
(function() {
  var y = FusionCharts(['private', 'Flash_Renderer']);
  if (y === undefined) {
    return
  }
  var z = y.swfobject = function() {
    var w = "undefined", OBJECT = "object", SHOCKWAVE_FLASH = "Shockwave Flash", SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", FLASH_MIME_TYPE = "application/x-shockwave-flash", EXPRESS_INSTALL_ID = "SWFObjectExprInst", ON_READY_STATE_CHANGE = "onreadystatechange", win = window, doc = document, nav = navigator, plugin = false, domLoadFnArr = [main], regObjArr = [], objIdArr = [], listenersArr = [], storedAltContent, storedAltContentId, storedCallbackFn, storedCallbackObj, isDomLoaded = false, isExpressInstallActive = false, dynamicStylesheet, dynamicStylesheetMedia, autoHideShow = true, ua = function() {
      var b = typeof doc.getElementById != w
          && typeof doc.getElementsByTagName != w
          && typeof doc.createElement != w, u = nav.userAgent.toLowerCase(), p = nav.platform
          .toLowerCase(), windows = p ? /win/.test(p) : /win/.test(u), mac = p
          ? /mac/.test(p)
          : /mac/.test(u), webkit = /webkit/.test(u) ? parseFloat(u.replace(
          /^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, ie = !+"\v1", playerVersion = [
          0, 0, 0], d = null;
      if (typeof nav.plugins != w
          && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
        d = nav.plugins[SHOCKWAVE_FLASH].description;
        if (d
            && !(typeof nav.mimeTypes != w && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) {
          plugin = true;
          ie = false;
          d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
          playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
          playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
          playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(
                  /^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0
        }
      } else if (typeof win.ActiveXObject != w) {
        try {
          var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
          if (a) {
            try {
              d = a.GetVariable("$version")
            } catch (e) {
            }
            if (d) {
              ie = true;
              d = d.split(" ")[1].split(",");
              playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10),
                  parseInt(d[2], 10)]
            }
          }
        } catch (e) {
        }
      }
      return {
        w3 : b,
        pv : playerVersion,
        wk : webkit,
        ie : ie,
        win : windows,
        mac : mac
      }
    }(), onDomLoad = function() {
      if (!ua.w3) {
        return
      }
      if ((typeof doc.readyState != w && doc.readyState == "complete")
          || (typeof doc.readyState == w && (doc.getElementsByTagName("body")[0] || doc.body))) {
        callDomLoadFunctions()
      }
      if (!isDomLoaded) {
        if (typeof doc.addEventListener != w) {
          doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false)
        }
        if (ua.ie && ua.win) {
          doc.attachEvent(ON_READY_STATE_CHANGE, function() {
                if (doc.readyState == "complete") {
                  doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
                  callDomLoadFunctions()
                }
              });
          if (win == top) {
            (function() {
              if (isDomLoaded) {
                return
              }
              try {
                doc.documentElement.doScroll("left")
              } catch (e) {
                setTimeout(arguments.callee, 0);
                return
              }
              callDomLoadFunctions()
            })()
          }
        }
        if (ua.wk) {
          (function() {
            if (isDomLoaded) {
              return
            }
            if (!/loaded|complete/.test(doc.readyState)) {
              setTimeout(arguments.callee, 0);
              return
            }
            callDomLoadFunctions()
          })()
        }
        addLoadEvent(callDomLoadFunctions)
      }
    }();
    function callDomLoadFunctions() {
      if (isDomLoaded) {
        return
      }
      try {
        var t = doc.getElementsByTagName("body")[0]
            .appendChild(createElement("span"));
        t.parentNode.removeChild(t)
      } catch (e) {
        return
      }
      isDomLoaded = true;
      var a = domLoadFnArr.length;
      for (var i = 0; i < a; i++) {
        domLoadFnArr[i]()
      }
    }
    function addDomLoadEvent(a) {
      if (isDomLoaded) {
        a()
      } else {
        domLoadFnArr[domLoadFnArr.length] = a
      }
    }
    function addLoadEvent(a) {
      if (typeof win.addEventListener != w) {
        win.addEventListener("load", a, false)
      } else if (typeof doc.addEventListener != w) {
        doc.addEventListener("load", a, false)
      } else if (typeof win.attachEvent != w) {
        addListener(win, "onload", a)
      } else if (typeof win.onload == "function") {
        var b = win.onload;
        win.onload = function() {
          b();
          a()
        }
      } else {
        win.onload = a
      }
    }
    function main() {
      if (plugin) {
        testPlayerVersion()
      } else {
        matchVersions()
      }
    }
    function testPlayerVersion() {
      var b = doc.getElementsByTagName("body")[0];
      var o = createElement(OBJECT);
      o.setAttribute("type", FLASH_MIME_TYPE);
      var t = b.appendChild(o);
      if (t) {
        var a = 0;
        (function() {
          if (typeof t.GetVariable != w) {
            var d;
            try {
              d = t.GetVariable("$version")
            } catch (e) {
            }
            if (d) {
              d = d.split(" ")[1].split(",");
              ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10),
                  parseInt(d[2], 10)]
            }
          } else if (a < 10) {
            a++;
            setTimeout(arguments.callee, 10);
            return
          }
          b.removeChild(o);
          t = null;
          matchVersions()
        })()
      } else {
        matchVersions()
      }
    }
    function matchVersions() {
      var a = regObjArr.length;
      if (a > 0) {
        for (var i = 0; i < a; i++) {
          var b = regObjArr[i].id;
          var c = regObjArr[i].callbackFn;
          var d = {
            success : false,
            id : b
          };
          if (ua.pv[0] > 0) {
            var e = getElementById(b);
            if (e) {
              if (hasPlayerVersion(regObjArr[i].swfVersion)
                  && !(ua.wk && ua.wk < 312)) {
                setVisibility(b, true);
                if (c) {
                  d.success = true;
                  d.ref = getObjectById(b);
                  c(d)
                }
              } else if (regObjArr[i].expressInstall && canExpressInstall()) {
                var f = {};
                f.data = regObjArr[i].expressInstall;
                f.width = e.getAttribute("width") || "0";
                f.height = e.getAttribute("height") || "0";
                if (e.getAttribute("class")) {
                  f.styleclass = e.getAttribute("class")
                }
                if (e.getAttribute("align")) {
                  f.align = e.getAttribute("align")
                }
                var g = {};
                var p = e.getElementsByTagName("param");
                var h = p.length;
                for (var j = 0; j < h; j++) {
                  if (p[j].getAttribute("name").toLowerCase() != "movie") {
                    g[p[j].getAttribute("name")] = p[j].getAttribute("value")
                  }
                }
                showExpressInstall(f, g, b, c)
              } else {
                displayAltContent(e);
                if (c) {
                  c(d)
                }
              }
            }
          } else {
            setVisibility(b, true);
            if (c) {
              var o = getObjectById(b);
              if (o && typeof o.SetVariable != w) {
                d.success = true;
                d.ref = o
              }
              c(d)
            }
          }
        }
      }
    }
    function getObjectById(a) {
      var r = null;
      var o = getElementById(a);
      if (o && o.nodeName == "OBJECT") {
        if (typeof o.SetVariable != w) {
          r = o
        } else {
          var n = o.getElementsByTagName(OBJECT)[0];
          if (n) {
            r = n
          }
        }
      }
      return r
    }
    function canExpressInstall() {
      return !isExpressInstallActive && hasPlayerVersion("6.0.65")
          && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312)
    }
    function showExpressInstall(a, b, c, d) {
      isExpressInstallActive = true;
      storedCallbackFn = d || null;
      storedCallbackObj = {
        success : false,
        id : c
      };
      var e = getElementById(c);
      if (e) {
        if (e.nodeName == "OBJECT") {
          storedAltContent = abstractAltContent(e);
          storedAltContentId = null
        } else {
          storedAltContent = e;
          storedAltContentId = c
        }
        a.id = EXPRESS_INSTALL_ID;
        if (typeof a.width == w
            || (!/%$/.test(a.width) && parseInt(a.width, 10) < 310)) {
          a.width = "310"
        }
        if (typeof a.height == w
            || (!/%$/.test(a.height) && parseInt(a.height, 10) < 137)) {
          a.height = "137"
        }
        doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
        var f = ua.ie && ua.win ? "ActiveX" : "PlugIn", fv = "MMredirectURL="
            + win.location.toString().replace(/&/g, "%26") + "&MMplayerType="
            + f + "&MMdoctitle=" + doc.title;
        if (typeof b.flashvars != w) {
          b.flashvars += "&" + fv
        } else {
          b.flashvars = fv
        }
        if (ua.ie && ua.win && e.readyState != 4) {
          var g = createElement("div");
          c += "SWFObjectNew";
          g.setAttribute("id", c);
          e.parentNode.insertBefore(g, e);
          e.style.display = "none";
          (function() {
            if (e.readyState == 4) {
              e.parentNode.removeChild(e)
            } else {
              setTimeout(arguments.callee, 10)
            }
          })()
        }
        createSWF(a, b, c)
      }
    }
    function displayAltContent(a) {
      if (ua.ie && ua.win && a.readyState != 4) {
        var b = createElement("div");
        a.parentNode.insertBefore(b, a);
        b.parentNode.replaceChild(abstractAltContent(a), b);
        a.style.display = "none";
        (function() {
          if (a.readyState == 4) {
            a.parentNode.removeChild(a)
          } else {
            setTimeout(arguments.callee, 10)
          }
        })()
      } else {
        a.parentNode.replaceChild(abstractAltContent(a), a)
      }
    }
    function abstractAltContent(a) {
      var b = createElement("div");
      if (ua.win && ua.ie) {
        b.innerHTML = a.innerHTML
      } else {
        var d = a.getElementsByTagName(OBJECT)[0];
        if (d) {
          var c = d.childNodes;
          if (c) {
            var e = c.length;
            for (var i = 0; i < e; i++) {
              if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM")
                  && !(c[i].nodeType == 8)) {
                b.appendChild(c[i].cloneNode(true))
              }
            }
          }
        }
      }
      return b
    }
    function createSWF(a, b, c) {
      var r, el = getElementById(c);
      if (ua.wk && ua.wk < 312) {
        return r
      }
      if (el) {
        if (typeof a.id == w) {
          a.id = c
        }
        if (ua.ie && ua.win) {
          var d = "";
          for (var i in a) {
            if (a[i] != Object.prototype[i]) {
              if (i.toLowerCase() == "data") {
                b.movie = a[i]
              } else if (i.toLowerCase() == "styleclass") {
                d += ' class="' + a[i] + '"'
              } else if (i.toLowerCase() != "classid") {
                d += ' ' + i + '="' + a[i] + '"'
              }
            }
          }
          var e = "";
          for (var j in b) {
            if (b[j] != Object.prototype[j]) {
              e += '<param name="' + j + '" value="' + b[j] + '" />'
            }
          }
          el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
              + d + '>' + e + '</object>';
          objIdArr[objIdArr.length] = a.id;
          r = getElementById(a.id)
        } else {
          var o = createElement(OBJECT);
          o.setAttribute("type", FLASH_MIME_TYPE);
          for (var m in a) {
            if (a[m] != Object.prototype[m]) {
              if (m.toLowerCase() == "styleclass") {
                o.setAttribute("class", a[m])
              } else if (m.toLowerCase() != "classid") {
                o.setAttribute(m, a[m])
              }
            }
          }
          for (var n in b) {
            if (b[n] != Object.prototype[n] && n.toLowerCase() != "movie") {
              createObjParam(o, n, b[n])
            }
          }
          el.parentNode.replaceChild(o, el);
          r = o
        }
      }
      return r
    }
    function createObjParam(a, b, c) {
      var p = createElement("param");
      p.setAttribute("name", b);
      p.setAttribute("value", c);
      a.appendChild(p)
    }
    function removeSWF(a) {
      var b = getElementById(a);
      if (b && b.nodeName == "OBJECT") {
        if (ua.ie && ua.win) {
          b.style.display = "none";
          (function() {
            if (b.readyState == 4) {
              removeObjectInIE(a)
            } else {
              setTimeout(arguments.callee, 10)
            }
          })()
        } else {
          b.parentNode.removeChild(b)
        }
      }
    }
    function removeObjectInIE(a) {
      var b = getElementById(a);
      if (b) {
        for (var i in b) {
          if (typeof b[i] == "function") {
            b[i] = null
          }
        }
        b.parentNode.removeChild(b)
      }
    }
    function getElementById(a) {
      var b = null;
      try {
        b = doc.getElementById(a)
      } catch (e) {
      }
      return b
    }
    function createElement(a) {
      return doc.createElement(a)
    }
    function addListener(a, b, c) {
      a.attachEvent(b, c);
      listenersArr[listenersArr.length] = [a, b, c]
    }
    function hasPlayerVersion(a) {
      var b = ua.pv, v = a.split(".");
      v[0] = parseInt(v[0], 10);
      v[1] = parseInt(v[1], 10) || 0;
      v[2] = parseInt(v[2], 10) || 0;
      return (b[0] > v[0] || (b[0] == v[0] && b[1] > v[1]) || (b[0] == v[0]
          && b[1] == v[1] && b[2] >= v[2])) ? true : false
    }
    function createCSS(a, b, c, d) {
      if (ua.ie && ua.mac) {
        return
      }
      var h = doc.getElementsByTagName("head")[0];
      if (!h) {
        return
      }
      var m = (c && typeof c == "string") ? c : "screen";
      if (d) {
        dynamicStylesheet = null;
        dynamicStylesheetMedia = null
      }
      if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
        var s = createElement("style");
        s.setAttribute("type", "text/css");
        s.setAttribute("media", m);
        dynamicStylesheet = h.appendChild(s);
        if (ua.ie && ua.win && typeof doc.styleSheets != w
            && doc.styleSheets.length > 0) {
          dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]
        }
        dynamicStylesheetMedia = m
      }
      if (ua.ie && ua.win) {
        if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
          dynamicStylesheet.addRule(a, b)
        }
      } else {
        if (dynamicStylesheet && typeof doc.createTextNode != w) {
          dynamicStylesheet.appendChild(doc.createTextNode(a + " {" + b + "}"))
        }
      }
    }
    function setVisibility(a, b) {
      if (!autoHideShow) {
        return
      }
      var v = b ? "visible" : "hidden";
      if (isDomLoaded && getElementById(a)) {
        getElementById(a).style.visibility = v
      } else {
        createCSS("#" + a, "visibility:" + v)
      }
    }
    function C(s) {
      var a = /[\\\"<>\.;]/;
      var b = a.exec(s) != null;
      return b && typeof encodeURIComponent != w ? encodeURIComponent(s) : s
    }
    var x = function() {
      if (ua.ie && ua.win) {
        window.attachEvent("onunload", function() {
              var a = listenersArr.length;
              for (var i = 0; i < a; i++) {
                listenersArr[i][0].detachEvent(listenersArr[i][1],
                    listenersArr[i][2])
              }
              var b = objIdArr.length;
              for (var j = 0; j < b; j++) {
                removeSWF(objIdArr[j])
              }
              for (var k in ua) {
                ua[k] = null
              }
              ua = null;
              for (var l in z) {
                z[l] = null
              }
              z = null
            })
      }
    }();
    return {
      registerObject : function(a, b, c, d) {
        if (ua.w3 && a && b) {
          var e = {};
          e.id = a;
          e.swfVersion = b;
          e.expressInstall = c;
          e.callbackFn = d;
          regObjArr[regObjArr.length] = e;
          setVisibility(a, false)
        } else if (d) {
          d({
                success : false,
                id : a
              })
        }
      },
      getObjectById : function(a) {
        if (ua.w3) {
          return getObjectById(a)
        }
      },
      embedSWF : function(d, e, f, g, h, l, m, n, o, p) {
        var q = {
          success : false,
          id : e
        };
        if (ua.w3 && !(ua.wk && ua.wk < 312) && d && e && f && g && h) {
          setVisibility(e, false);
          addDomLoadEvent(function() {
                f += "";
                g += "";
                var a = {};
                if (o && typeof o === OBJECT) {
                  for (var i in o) {
                    a[i] = o[i]
                  }
                }
                a.data = d;
                a.width = f;
                a.height = g;
                var b = {};
                if (n && typeof n === OBJECT) {
                  for (var j in n) {
                    b[j] = n[j]
                  }
                }
                if (m && typeof m === OBJECT) {
                  for (var k in m) {
                    if (typeof b.flashvars != w) {
                      b.flashvars += "&" + k + "=" + m[k]
                    } else {
                      b.flashvars = k + "=" + m[k]
                    }
                  }
                }
                if (hasPlayerVersion(h)) {
                  var c = createSWF(a, b, e);
                  if (a.id == e) {
                    setVisibility(e, true)
                  }
                  q.success = true;
                  q.ref = c
                } else if (l && canExpressInstall()) {
                  a.data = l;
                  showExpressInstall(a, b, e, p);
                  return
                } else {
                  setVisibility(e, true)
                }
                if (p) {
                  p(q)
                }
              })
        } else if (p) {
          p(q)
        }
      },
      switchOffAutoHideShow : function() {
        autoHideShow = false
      },
      ua : ua,
      getFlashPlayerVersion : function() {
        return {
          major : ua.pv[0],
          minor : ua.pv[1],
          release : ua.pv[2]
        }
      },
      hasFlashPlayerVersion : hasPlayerVersion,
      createSWF : function(a, b, c) {
        if (ua.w3) {
          return createSWF(a, b, c)
        } else {
          return undefined
        }
      },
      showExpressInstall : function(a, b, c, d) {
        if (ua.w3 && canExpressInstall()) {
          showExpressInstall(a, b, c, d)
        }
      },
      removeSWF : function(a) {
        if (ua.w3) {
          removeSWF(a)
        }
      },
      createCSS : function(a, b, c, d) {
        if (ua.w3) {
          createCSS(a, b, c, d)
        }
      },
      addDomLoadEvent : addDomLoadEvent,
      addLoadEvent : addLoadEvent,
      getQueryParamValue : function(a) {
        var q = doc.location.search || doc.location.hash;
        if (q) {
          if (/\?/.test(q)) {
            q = q.split("?")[1]
          }
          if (a == null) {
            return C(q)
          }
          var b = q.split("&");
          for (var i = 0; i < b.length; i++) {
            if (b[i].substring(0, b[i].indexOf("=")) == a) {
              return C(b[i].substring((b[i].indexOf("=") + 1)))
            }
          }
        }
        return ""
      },
      expressInstallCallback : function() {
        if (isExpressInstallActive) {
          var a = getElementById(EXPRESS_INSTALL_ID);
          if (a && storedAltContent) {
            a.parentNode.replaceChild(storedAltContent, a);
            if (storedAltContentId) {
              setVisibility(storedAltContentId, true);
              if (ua.ie && ua.win) {
                storedAltContent.style.display = "block"
              }
            }
            if (storedCallbackFn) {
              storedCallbackFn(storedCallbackObj)
            }
          }
          isExpressInstallActive = false
        }
      }
    }
  }();
  y.core.options.requiredFlashPlayerVersion = '8';
  y.core.options.installRedirectMessage = 'You need Adobe Flash '
      + 'Player 8 (or above) to view the charts on this page. It is a free, '
      + 'lightweight and safe installation from Adobe Systems Incorporated.'
      + '\n\nWould you like to go to Adobe\'s website and install Flash Player?';
  var A = false;
  var B = /[\\\"<>;]/;
  var C = function(s) {
    return (B.exec(s) !== null)
        && typeof window.encodeURIComponent !== undefined ? window
        .encodeURIComponent(s) : s
  };
  var D = function(e, a) {
    if (a && a.source === 'XmlHttpRequest') {
      return
    }
    var b = e.sender;
    if (b.ref && typeof b.ref.dataInvokedOnSWF === 'function'
        && b.ref.dataInvokedOnSWF() && typeof b.ref.getXML === 'function') {
      y.raiseWarning(b, '08300116', 'run', '::DataHandler~__fusioncharts_vars',
          'Data was set in UTF unsafe manner');
      b.setChartData(window.unescape(e.sender.ref.getXML({
                escaped : true
              })), FusionChartsDataFormats.XML, true);
      b.flashVars.dataXML = b.getChartData(FusionChartsDataFormats.XML);
      delete b.flashVars.dataURL
    }
    e.sender.removeEventListener('DataLoaded', D)
  };
  window.__fusioncharts_dimension = (function() {
    var c = /.*?\%\s*?$/g;
    return function(a) {
      var b, parent;
      return !((b = y.core(a)) instanceof y.core && b.ref && (parent = b.ref.parentNode))
          ? {}
          : {
            width : parent.offsetWidth
                * (c.test(b.width) ? parseInt(b.width, 10) / 100 : 1),
            height : parent.offsetHeight
                * (c.test(b.height) ? parseInt(b.height, 10) / 100 : 1)
          }
    }
  }());
  window.__fusioncharts_vars = function(a, b) {
    var c = y.core.items[a];
    if (!(c instanceof y.core)) {
      y
          .raiseError(y.core, '25081621', 'run', '::FlashRenderer',
              'FusionCharts Flash object is accessing flashVars of non-existent object.');
      return false
    }
    if (typeof b === 'object') {
      if (c.ref && typeof c.ref.dataInvokedOnSWF === 'function'
          && c.ref.dataInvokedOnSWF()) {
        if (b.dataURL !== undefined) {
          c.addEventListener('DataLoaded', D)
        } else if (b.dataXML !== undefined) {
          b.dataXML = window.unescape(b.dataXML)
        }
      } else {
        delete b.dataURL;
        delete b.dataXML
      }
      y.extend(c.flashVars, b);
      return true
    }
    return c.flashVars
  };
  y.addEventListener('BeforeInitialize', function(a) {
        var b = a.sender;
        if (b.options.renderer !== 'flash') {
          return
        }
        if (b.width === undefined) {
          b.width = y.renderer.policies.flashVars.chartWidth[1]
        }
        if (b.height === undefined) {
          b.height = y.renderer.policies.flashVars.chartHeight[1]
        }
        if (b.flashVars.DOMId === undefined) {
          b.flashVars.DOMId = b.id
        }
        y.extend(b.flashVars, {
              registerWithJS : '1',
              chartWidth : b.width,
              chartHeight : b.height,
              InvalidXMLText : 'Invalid data.'
            });
        if (Boolean(b.options.autoInstallRedirect) === true
            && !y.swfobject
                .hasFlashPlayerVersion(y.core.options.requiredFlashPlayerVersion
                    .toString()) && A === false) {
          A = true;
          if (window.confirm(y.core.options.installRedirectMessage)) {
            window.location.href = 'http://get.adobe.com/flashplayer/'
          }
        }
        if (b.options.dataFormat === undefined
            && b.options.dataSource === undefined) {
          b.options.dataFormat = FusionChartsDataFormats.XMLURL;
          b.options.dataSource = 'Data.xml'
        }
      });
  y.addEventListener('Disposed', function(e) {
        if (e.sender.options.renderer !== 'flash') {
          return
        }
        y.swfobject.removeSWF(e.sender.id)
      });
  y.addEventListener('Loaded', function(e) {
        if (e.sender.options.renderer !== 'flash') {
          return
        }
        e.sender.flashVars.animation = '0'
      });
  y.addEventListener('DataLoadRequested', function(a, b) {
        var c = a.sender;
        if (c.options.renderer !== 'flash') {
          return
        }
        if (window.location.protocol === 'file:'
            && b.dataFormat === FusionChartsDataFormats.XML
            && Boolean(c.options.safeMode) === true) {
          if (c.ref && c.ref.setDataURL) {
            c.ref.setDataURL(b.url, false)
          } else {
            c.flashVars.dataURL = b.url
          }
          a.stopPropagation();
          b.cancelDataLoadRequest();
          c.addEventListener('DataLoaded', D)
        }
        if (c.ref && typeof c.showChartMessage === 'function') {
          delete c.flashVars.stallLoad;
          c.ref.showChartMessage('XMLLoadingText')
        } else {
          c.flashVars.stallLoad = true
        }
      });
  y.addEventListener('DataLoadRequestCancelled', function(a) {
        var b = a.sender;
        if (b.options.renderer !== 'flash') {
          return
        }
        if (b.ref && typeof b.showChartMessage === 'function') {
          b.ref.showChartMessage()
        }
        delete b.flashVars.stallLoad
      });
  y.addEventListener('DataLoadError', function(a, b) {
        var c = a.sender;
        if (c.options.renderer !== 'flash') {
          return
        }
        if (c.ref && typeof c.ref.showChartMessage === 'function'
            && b.source === 'XmlHttpRequest') {
          c.ref.showChartMessage('LoadDataErrorText')
        } else {
          delete c.flashVars.dataURL;
          c.flashVars.dataXML = '<JSON parsing error>';
          delete c.flashVars.stallLoad
        }
      });
  y.addEventListener('DataLoadRequestCompleted', function(a, b) {
        var c = a.sender;
        if (c.options.renderer !== 'flash' || b.source !== 'XmlHttpRequest') {
          return
        }
        delete c.flashVars.stallLoad
      });
  window.__fusioncharts_event = function(a, b) {
    setTimeout(function() {
          y.raiseEvent(a.type, b, y.core.items[a.sender])
        }, 0)
  };
  var E = {
    dataFormat : 'xml',
    init : function() {
    },
    policies : {
      params : {
        scaleMode : ['scaleMode', 'noScale'],
        scale : ['scaleMode', 'noScale'],
        wMode : ['wMode', 'opaque'],
        menu : ['menu', undefined],
        bgColor : ['bgColor', undefined],
        allowScriptAccess : ['allowScriptAccess', 'always'],
        quality : ['quality', 'best'],
        swLiveConnect : ['swLiveConnect', undefined],
        base : ['base', undefined],
        align : ['align', undefined],
        salign : ['sAlign', undefined]
      },
      flashVars : {
        lang : ['lang', 'EN'],
        debugMode : ['debugMode', undefined],
        animation : ['animate', undefined]
      },
      options : {
        autoInstallRedirect : ['autoInstallRedirect', false]
      }
    },
    render : function(a, b) {
      if (Boolean(this.flashVars.animation) === true) {
        delete this.flashVars.animation
      }
      if (!this.src) {
        y.raiseError(this, '03102348', 'run', '::FlashRenderer.render',
            'Could not find a valid "src" attribute. swfUrl or chart '
                + 'type missing.')
      }
      var c = {}, dataXML = this.flashVars.dataXML, dataURL = this.flashVars.dataURL;
      y.extend(c, this.flashVars);
      if (this.flashVars.stallLoad === true) {
        if (this.options.dataFormat === FusionChartsDataFormats.XML) {
          dataXML = this.options.dataSource
        }
        if (this.options.dataFormat === FusionChartsDataFormats.XMLURL) {
          dataURL = this.options.dataSource
        }
      }
      c.dataXML = window.encodeURIComponent(dataXML || '');
      c.dataURL = C(dataURL || '');
      y.swfobject.embedSWF(this.src, this.id, this.width, this.height, '8.0.0',
          undefined, c, this.params, this.attributes, b)
    },
    update : function(a) {
      var b = this.ref, data = a.data;
      this.flashVars.dataXML = data;
      if (a.error === undefined) {
        if (this.isActive() && typeof b.setDataXML === 'function') {
          b.setDataXML(data, false)
        } else {
          delete this.flashVars.dataURL;
          delete this.flashVars.animation
        }
      } else {
        if (this.isActive() && typeof b.showChartMessage === 'function') {
          b.showChartMessage('InvalidXMLText')
        } else {
          this.flashVars.dataXML = '<Invalid' + a.format.toUpperCase() + '>';
          delete this.flashVars.dataURL;
          delete this.flashVars.animation
        }
      }
    },
    resize : function() {
      this.flashVars.chartWidth = this.width;
      this.flashVars.chartHeight = this.height;
      if (this.ref !== undefined) {
        this.ref.width = this.width;
        this.ref.height = this.height;
        if (typeof this.ref.resize === 'function') {
          this.ref.resize(this.ref.offsetWidth, this.ref.offsetHeight)
        }
      }
    },
    config : function(a) {
      y.extend(this.flashVars, a)
    }
  };
  E.prototype = {
    getSWFHTML : function() {
      var a = document.createElement('span'), inElm = document
          .createElement('span'), tempId = 'RnVzaW9uQ2hhcnRz'
          + (new Date()).getTime();
      a.appendChild(inElm);
      inElm.setAttribute('id', tempId);
      a.style.display = 'none';
      document.getElementsByTagName('body')[0].appendChild(a);
      y.swfobject.embedSWF(this.src, tempId, this.width, this.height, '8.0.0',
          undefined, this.flashVars, this.params, this.attrs);
      var b = a.innerHTML.replace(tempId, this.id);
      y.swfobject.removeSWF(tempId);
      a.parentNode.removeChild(a);
      return b
    },
    setTransparent : function(a) {
      if (typeof a !== 'boolean' && a !== null) {
        a = true
      }
      this.params.wMode = a === null ? 'window' : (a === true
          ? 'transparent'
          : 'opaque')
    },
    addVariable : y.core.prototype.configure
  };
  y.renderer.register('flash', E);
  if (!/\(iPhone;|\(iPad;/i.test(navigator.userAgent)) {
    y.renderer.setDefault('flash')
  }
}());
(function() {
  var M, FCC = {}, baseURL = 'JSClass/', covertToFCC, renderArray = [], FCCready = false, i, scriptTags, jsConf = {};
  M = FusionCharts(['private', 'Canvas_Renderer']);
  if (M === undefined) {
    return
  }
  var N = false;
  function noEffect() {
    return undefined
  }
  FCC.init = function() {
    var m = function(c, d, e) {
      return function(a, b) {
        b.style[c] = (e ? e : '') + a + (d ? d : '')
      }
    }, FCFCC = {
      color : ["AFD8F8", "F6BD0F", "8BBA00", "FF8E46", "008E8E", "D64646",
          "8E468E", "588526", "B3AA00", "008ED6", "9D080D", "A186BE", "CC6600",
          "FDC689", "ABA000", "F26D7D", "FFF200", "0054A6", "F7941C", "CC3300",
          "006600", "663300", "6DCFF6"],
      seriesName : {
        'Column2D' : 1,
        'Column3D' : 1,
        'Line' : 1,
        'Area2D' : 1,
        'Bar2D' : 1,
        'Pie2D' : 1,
        'Pie3D' : 1,
        'Doughnut2D' : 1,
        'Doughnut3D' : 1,
        'Pareto2D' : 1.5,
        'Pareto3D' : 1.5,
        'MSColumn2D' : 2,
        'MSColumn3D' : 2,
        'MSLine' : 2,
        'ZoomLine' : 2.5,
        'MSBar2D' : 2,
        'MSBar3D' : 2,
        'MSArea' : 2,
        'InverseMSLine' : 2.2,
        'InverseMSColumn2D' : 2.2,
        'InverseMSArea' : 2.2,
        'StackedColumn3D' : 3,
        'Marimekko' : 3,
        'StackedColumn2D' : 3,
        'StackedColumn2DLine' : 3,
        'StackedColumn3DLine' : 3,
        'StackedBar2D' : 3,
        'StackedBar3D' : 3,
        'StackedArea2D' : 3,
        'MSCombi3D' : 4,
        'MSCombi2D' : 4,
        'MSCombiDY2D' : 5,
        'MSColumnLine3D' : 4,
        'MSColumn3DLineDY' : 5,
        'MSStackedColumn2D' : 6,
        'MSStackedColumn2DLineDY' : 6.5,
        'StackedColumn3DLineDY' : 5.5,
        'Scatter' : 7,
        'Bubble' : 7.5,
        'ScrollColumn2D' : 2,
        'ScrollLine2D' : 2,
        'ScrollArea2D' : 2,
        'ScrollStackedColumn2D' : 3,
        'ScrollCombi2D' : 4,
        'ScrollCombiDY2D' : 5,
        'SSGrid' : 9,
        'Spline' : 1,
        'SplineArea' : 1,
        'MSSpline' : 2,
        'MSSplineArea' : 2,
        'MultiAxisLine' : 8
      },
      highCharts : {
        'Column2D' : 'column',
        'Column3D' : 'column',
        'Line' : 'line',
        'Area2D' : 'area',
        'Bar2D' : 'bar',
        'Pie2D' : 'pie',
        'Pie3D' : 'pie',
        'Doughnut2D' : 'pie',
        'Doughnut3D' : 'pie',
        'Pareto2D' : 'column',
        'Pareto3D' : 'column',
        'MSColumn2D' : 'column',
        'MSColumn3D' : 'column',
        'MSLine' : 'line',
        'ZoomLine' : 'line',
        'MSBar2D' : 'bar',
        'MSBar3D' : 'bar',
        'MSArea' : 'area',
        'InverseMSLine' : 'line',
        'InverseMSColumn2D' : 'column',
        'InverseMSArea' : 'area',
        'StackedColumn3D' : 'column',
        'StackedColumn2D' : 'column',
        'Marimekko' : 'column',
        'StackedColumn2DLine' : 'column',
        'StackedColumn3DLine' : 'column',
        'StackedBar2D' : 'bar',
        'StackedBar3D' : 'bar',
        'StackedArea2D' : 'area',
        'MSCombi3D' : 'column',
        'MSCombi2D' : 'column',
        'MSCombiDY2D' : 'column',
        'MSColumnLine3D' : 'column',
        'MSColumn3DLineDY' : 'column',
        'MSStackedColumn2D' : '',
        'MSStackedColumn2DLineDY' : '',
        'StackedColumn3DLineDY' : 'column',
        'Scatter' : 'scatter',
        'Bubble' : 'scatter',
        'ScrollColumn2D' : 'column',
        'ScrollLine2D' : 'line',
        'ScrollArea2D' : 'area',
        'ScrollStackedColumn2D' : 'column',
        'ScrollCombi2D' : 'column',
        'ScrollCombiDY2D' : 'column',
        'SSGrid' : '',
        'Spline' : 'spline',
        'SplineArea' : 'areaspline',
        'MSSpline' : 'spline',
        'MSSplineArea' : 'areaspline',
        'MultiAxisLine' : ''
      },
      combi : {
        'column2d' : 'column',
        'column3d' : 'column',
        'line' : 'line',
        'area' : 'area'
      },
      valueAbs : {
        'Pie2D' : true,
        'Pie3D' : true,
        'Doughnut2D' : true,
        'Doughnut3D' : true,
        'Marimekko' : true
      },
      exportFormat : {
        png : 'image/png',
        jpg : 'image/jpeg',
        pdf : 'application/pdf',
        svg : 'image/svg+xml'
      },
      JSONconf : {
        blankChart : {
          chart : {
            events : {},
            margin : [0, 0, 0, 0]
          },
          credits : {
            href : 'http://www.fusioncharts.com?BS=FCHSEvalMark',
            text : 'FusionCharts - HighCharts',
            enabled : N
          },
          legend : {
            enabled : false
          },
          title : {
            text : 'No data to display',
            style : {
              fontFamily : 'Verdana',
              fontSize : '10px',
              color : '#666666'
            }
          },
          plotOptions : {
            series : {}
          },
          exporting : {
            enabled : false
          }
        }
      },
      commonMethodCSV : 'saveAsImage,print,exportChart,getXML,getChartAttribute,getDataAsCSV,hasRendered,signature,cancelExport',
      methodCSV : {
        'pie3d' : ',togglePieSlice',
        'pie2d' : ',togglePieSlice',
        'doughnut2D' : ',togglePieSlice',
        'doughnut3D' : ',togglePieSlice',
        'mscombi3d' : ',view2D,view3D,resetView,rotateView,getViewAngles,fitToStage',
        'zoomline' : ',zoomTo,setZoomMode,zoomOut,resetChart'
      },
      method : {
        getExternalInterfaceMethods : function(a) {
          return FCFCC.commonMethodCSV
              + (FCFCC.methodCSV[a || this.FusionCharts.chartType()] || '')
        },
        print : function() {
          var a = this.id;
          FCC.items[a].FCCObj.FCC.print()
        },
        exportChart : function(a) {
          var b = this.id, HCConf = {}, HCObj = FCC.items[b].FCCObj.FCC;
          if (HCObj.options.exporting.enabled) {
            if (typeof a === 'object') {
              for (var x in a) {
                if (x.toLowerCase() === 'exportformat'
                    && FCFCC.exportFormat[a[x].toLowerCase()]) {
                  HCConf.type = FCFCC.exportFormat[a[x].toLowerCase()]
                } else if (x.toLowerCase() === 'exportfilename') {
                  HCConf.filename = a[x]
                }
              }
            }
            HCObj.exportChart(HCConf)
          }
        },
        getXML : function() {
          var a = this.id;
          return M.core.items[a].getXMLData()
        },
        signature : function() {
          return 'FusionCharts/3.2.0/JS'
        },
        hasRendered : function() {
          var a = this.id;
          if (typeof FCC.items[a] === 'object') {
            return true
          } else {
            return false
          }
        },
        togglePieSlice : function(a) {
          if (this.ref && this.ref.FCC && this.ref.FCC.series
              && this.ref.FCC.series[0] && this.ref.FCC.series[0].data
              && this.ref.FCC.series[0].data[a]
              && this.ref.FCC.series[0].data[a].slice()) {
            this.ref.FCC.series[0].data[a].slice()
          }
        }
      },
      supportedStyle : {
        font : function(c, d, e) {
          var f, x, map = {
            font : m('font-family'),
            size : m('font-size', 'px'),
            color : m('color', undefined, '#'),
            align : function(a, b) {
              b.align = a
            },
            bgColor : m('background-color', undefined, '#'),
            borderColor : m('border-color', undefined, '#'),
            isHTML : '',
            leftMargin : m('margin-left', 'px'),
            letterSpacing : m('letter-spacing', 'px'),
            bold : function(a, b) {
              b['font-weight'] = a == '1' ? 'bold' : 'normal'
            },
            italic : function(a, b) {
              b['font-style'] = a == '1' ? 'italic' : 'normal'
            },
            underline : function(a, b) {
              b['text-decoration'] = a == '1' ? 'underline' : 'normal'
            }
          };
          switch (d) {
            case 'caption' :
              f = c.title;
              break;
            case 'datalabels' :
              f = c.xAxis.labels;
              break;
            case 'datavalues' :
              f = c.plotOptions.series.dataLabels;
              break;
            case 'subcaption' :
              f = c.subtitle;
              break;
            case 'tooltip' :
              f = c.tooltip;
              break;
            case 'trendvalues' :
              f = undefined;
              break;
            case 'xaxisname' :
              f = c.xAxis.title;
              break;
            case 'yaxisname' :
              f = c.yAxis[0].title;
              break;
            case 'yaxisvalues' :
              f = c.yAxis[0].labels;
              break;
            default :
              break
          }
          if (typeof f === 'object') {
            for (x in e) {
              if (typeof map[x] === 'function') {
                map[x](e[x], f)
              }
            }
          }
        }
      }
    };
    var n = {};
    function margeClone(a, b) {
      var c;
      if (typeof a !== 'object' && typeof b !== 'object') {
        return null
      }
      if (typeof a !== 'object') {
        a = {}
      }
      if (typeof b !== 'object') {
        b = a;
        a = {}
      }
      if (b instanceof Array) {
        for (c = 0; c < b.length; c += 1) {
          if (typeof b[c] !== 'object') {
            a[c] = b[c]
          } else {
            a[c] = margeClone(a[c], b[c])
          }
        }
      } else {
        for (c in b) {
          if (typeof b[c] !== 'object') {
            a[c] = b[c]
          } else {
            a[c] = margeClone(a[c], b[c])
          }
        }
      }
      return a
    }
    FCC.prototype = {
      setTransparent : function(a) {
        if (!this.jsVars) {
          this.jsVars = {}
        }
        if (typeof a !== 'boolean' && a !== null) {
          a = true
        }
        this.jsVars.transparent = a;
        if (typeof jQuery === 'function') {
          jQuery('#' + this.id).css('background-color',
              (a === true) ? '' : '#FFFFFF')
        }
      },
      getSWFHTML : noEffect,
      _overrideJSChartConfiguration : function(a) {
        jsConf[this.id] = a
      }
    };
    if (M.core.options && M.core.options.scriptBaseUri !== undefined) {
      baseURL = M.core.options.scriptBaseUri
    } else {
      scriptTags = document.getElementsByTagName('script');
      if (scriptTags) {
        for (i = 0; i < scriptTags.length; i += 1) {
          if (scriptTags[i].src.indexOf('FusionCharts.js') !== -1) {
            baseURL = scriptTags[i].src.split("FusionCharts.js")[0]
          }
        }
      }
    }
    FCC.isReady = function() {
      return FCCready
    };
    FCC.items = {};
    function loadScript(a) {
      var b = document.createElement('script');
      b.setAttribute('type', 'text/javascript');
      b.setAttribute('src', a);
      var c = document.getElementsByTagName('head');
      c[0].appendChild(b)
    }
    function checkFCCReady() {
      var a;
      if (typeof window.Highcharts === 'object') {
        FCCready = true;
        if (typeof FCC.render == 'function') {
          while (renderArray.length > 0) {
            a = renderArray.splice(0, 1)[0];
            FCC.render.call(a[0], a[1], a[2])
          }
        }
      } else {
        setTimeout(checkFCCReady, 300)
      }
    }
    function loadFCC() {
      if (typeof jQuery === 'function') {
        jQuery.noConflict();
        if ($ === undefined) {
          $ = jQuery
        }
        if (typeof window.Highcharts !== 'object') {
          loadScript(baseURL + 'highcharts.js');
          setTimeout(checkFCCReady, 300)
        } else {
          checkFCCReady()
        }
      } else {
        setTimeout(loadFCC, 300)
      }
    }
    if (typeof jQuery !== 'function') {
      loadScript(baseURL + 'jquery.min.js');
      setTimeout(loadFCC, 300)
    } else {
      loadFCC()
    }
    var o = function(a, b, c, d, e, f) {
      var g, minPowerOfTen, powerOfTen, y_interval, rangePowerOfTen, rangeInterval, y_topBound, y_lowerBound, yMaxGiven, yMinGiven, yMax, yMin, range, interval;
      a = (typeof a !== 'number') ? 0.1 : a;
      b = (typeof b !== 'number') ? 0 : b;
      if ((a === b) && (a === 0)) {
        a = 0.1
      }
      if (typeof e === 'undefined' || typeof e === 'null' || e === '') {
        e = false
      }
      if (typeof f === 'undefined' || typeof f === 'null' || f === '') {
        f = true
      }
      g = Math.floor(Math.log(Math.abs(a)) / Math.LN10);
      minPowerOfTen = Math.floor(Math.log(Math.abs(b)) / Math.LN10);
      powerOfTen = Math.max(minPowerOfTen, g);
      y_interval = Math.pow(10, powerOfTen);
      if (Math.abs(a) / y_interval < 2 && Math.abs(b) / y_interval < 2) {
        powerOfTen -= 1;
        y_interval = Math.pow(10, powerOfTen)
      }
      rangePowerOfTen = Math.floor(Math.log(a - b) / Math.LN10);
      rangeInterval = Math.pow(10, rangePowerOfTen);
      if (((a - b) > 0) && ((y_interval / rangeInterval) >= 10)) {
        y_interval = rangeInterval;
        powerOfTen = rangePowerOfTen
      }
      y_topBound = (Math.floor(a / y_interval) + 1) * y_interval;
      if (b < 0) {
        y_lowerBound = -1
            * ((Math.floor(Math.abs(b / y_interval)) + 1) * y_interval)
      } else {
        if (f) {
          y_lowerBound = 0
        } else {
          y_lowerBound = Math.floor(Math.abs(b / y_interval) - 1) * y_interval;
          y_lowerBound = (y_lowerBound < 0) ? 0 : y_lowerBound
        }
      }
      if (e && a <= 0) {
        y_topBound = 0
      }
      if (c === null || c === undefined || c === "") {
        yMaxGiven = false
      } else {
        yMaxGiven = true
      }
      if (d === null || d === undefined || d === ""
          || typeof Number(d) === 'NaN') {
        yMinGiven = false
      } else {
        yMinGiven = true
      }
      if (yMaxGiven === false || (yMaxGiven === true && Number(c) < a)) {
        yMax = y_topBound
      } else {
        yMax = Number(c)
      }
      if (yMinGiven === false || (yMinGiven === true && Number(d) > b)) {
        yMin = y_lowerBound
      } else {
        yMin = Number(d)
      }
      range = Math.abs(yMax - yMin);
      interval = y_interval;
      return {
        Max : yMax,
        Min : yMin,
        Range : range,
        interval : interval
      }
    };
    function createContainer(a, b, c, d, e) {
      var f = document.getElementById(b), __container = document
          .getElementById(a), lengthPercentageRegExp = /\%\s*?$/ig;
      if (e === true) {
        if (f) {
          __container.removeChild(f)
        }
        f = document.createElement('div');
        f.setAttribute('id', b);
        __container.appendChild(f)
      }
      for (var x in this.attributes) {
        f[x] = this.attributes[x]
      }
      if (this.attributes['class']) {
        f.className = this.attributes['class']
      }
      f.setAttribute('style',
          'display: inline-block; zoom: 1; *display: inline;');
      f.style.width = c + (c.match(lengthPercentageRegExp) ? '' : 'px');
      f.style.height = d + (d.match(lengthPercentageRegExp) ? '' : 'px')
    }
    function removeChart(a, b) {
      if (FCC.items[a]) {
        if (FCC.items[a].FCCObj && FCC.items[a].FCCObj.FCC) {
          FCC.items[a].FCCObj.FCC.destroy()
        }
        clearTimeout(FCC.items[a].timeChach);
        if (b === true) {
          var c = FCC.items[a].FCCObj;
          if (c && c.parentNode) {
            c.parentNode.removeChild(c)
          }
        }
        delete FCC.items[a]
      }
    }
    function createSeries(a, b, c, d, e, f, g, h, i) {
      return {
        data : [],
        FCtype : a,
        color : b,
        type : c,
        name : d ? d : ' ',
        yAxis : e ? 1 : undefined,
        showvalue : f,
        lineColor : g,
        lineWidth : h,
        marker : i
      }
    }
    function parseStr(a) {
      if (typeof a === 'string') {
        return a.replace(/\{br\}/ig, '<br/>')
      } else {
        return ''
      }
    }
    function createMsg(a, b, c) {
      var d = FCFCC.JSONconf.blankChart;
      d.title.y = parseInt(document.getElementById(a).offsetHeight, 10) / 2;
      d.chart.renderTo = a;
      d.title.text = n[a][b] ? n[a][b] : b;
      if (typeof c === 'string') {
        M.raiseEvent(c, {}, M.core.items[a])
      }
      return d
    }
    function showChartMessage(a) {
      var b = this.id, HCJson, FC = M.core.items[b];
      if (FC.ref) {
        n[b].msgTxt = a;
        FC.ref.FCC.destroy();
        HCJson = createMsg(b, 'msgTxt', undefined);
        FC.ref.FCC = new Highcharts.Chart(HCJson);
        FCC.items[b].baseObj = HCJson
      }
      if (FC.link.root === FC) {
        return
      }
      var c = M.extend({
            show : true
          }, this.FusionCharts.link.parent.options.overlayButton);
      M.extend(c,
          this.FusionCharts.link.parent.link.configuration().overlayButton
              || {});
      this.drawOverlayButton(c)
    }
    function drawOverlayButton(b) {
      if (b.show) {
        var c = document.createElement('span');
        c.innerHTML = b.message ? b.message : "Back";
        c.style.border = '1px solid #'
            + (b.borderColor ? b.borderColor : "7f8975");
        c.style.backgroundColor = '#' + (b.bgColor ? b.bgColor : "edefec");
        c.style.fontFamily = b.font ? b.font : "Verdana";
        c.style.color = '#' + b.fontColor ? b.fontColor : "49563a";
        c.style.fontSize = (b.fontSize ? b.fontSize : '10') + 'px';
        c.style.padding = (b.padding ? b.padding : '3') + 'px';
        c.style.fontWeight = parseInt(b.bold, 10) === 0 ? 'normal' : 'bold';
        c.style.position = 'absolute';
        c.style.top = '1px';
        c.style.right = '1px';
        c.style._cursor = 'hand';
        c.style.cursor = 'pointer';
        c.onclick = (function(a) {
          return function() {
            M.raiseEvent('OverlayButtonClick', {}, a.FusionCharts)
          }
        }(this));
        document.getElementById(this.id).childNodes[0].appendChild(c)
      }
    }
    function getSeriesName(a) {
      return FCFCC.seriesName[a]
    }
    function convertColor(a, b, c) {
      var R = 0, G = 0, B = 0, colorStr, tempArr;
      if (c && c.match(/^rgba/ig)) {
        tempArr = c.split(',');
        R = tempArr[0].slice(tempArr[3].indexOf('(') + 1);
        G = tempArr[1];
        B = tempArr[2];
        if (!b) {
          b = parseInt(tempArr[3].slice(0, tempArr[3].indexOf(')')), 10) * 100
        }
      }
      if (a) {
        colorStr = a.replace(/[#\s]/ig, '').split(',')[0];
        switch (colorStr.length) {
          case 3 :
            colorStr = colorStr[0] + colorStr[0] + colorStr[1] + colorStr[1]
                + colorStr[2] + colorStr[2];
            break;
          case 6 :
            break;
          default :
            colorStr = (colorStr + 'FFFFFF').slice(0, 6);
            break
        }
        R = parseInt(colorStr.slice(0, 2), 16);
        G = parseInt(colorStr.slice(2, 4), 16);
        B = parseInt(colorStr.slice(4, 6), 16)
      }
      if (!b) {
        b = 100
      }
      if (typeof b === 'string') {
        b = b.split(',')[0]
      }
      b = parseInt(b, 10) / 100;
      return 'rgba(' + R + ',' + G + ',' + B + ',' + b + ')'
    }
    var p = function(x, y, a, b, c) {
      x = x ? x : 0;
      y = y ? y : 0;
      a = (typeof a !== 'undefined') ? a : 400;
      b = (typeof b !== 'undefined') ? b : 400;
      c = (typeof c !== 'undefined') ? c : 0;
      var d, x2, y1, y2, tan, temp;
      tan = Math.tan((c * Math.PI) / 180);
      y1 = Math.round(b / 2 - ((a / 2) * tan));
      d = Math.round(a / 2 - ((b / 2) / tan));
      d = (d < 0) ? 0 : d;
      d = (d > a) ? a : d;
      y1 = (y1 < 0) ? 0 : y1;
      y1 = (y1 > b) ? b : y1;
      x2 = a - d;
      y2 = b - y1;
      if (c > 90 && c <= 270) {
        temp = y1;
        y1 = y2;
        y2 = temp
      }
      if (c > 180 && c <= 360) {
        temp = d;
        d = x2;
        x2 = temp
      }
      return [d + x, y1 + y, x2 + x, y2 + y]
    };
    var q = function(a, b, c) {
      var x, first, count = 0, blendAt, rgb, alpha, colorStop = [];
      b = b ? b.split(",") : undefined;
      c = c ? c.split(",") : undefined;
      a = a.split(",");
      first = (typeof c === 'object') ? c[0] : undefined;
      for (x = 0; x < a.length; x += 1) {
        rgb = a[x];
        blendAt = c ? c[x] : undefined;
        alpha = b ? b[x] : 100;
        alpha = alpha ? alpha : 100;
        if (!blendAt) {
          first = 1;
          blendAt = (x !== 0) ? ((100 - count) / (a.length - x)) : 0
        }
        if (first) {
          count += parseInt(blendAt, 10)
        } else {
          count = parseInt(blendAt, 10)
        }
        if (count >= 100) {
          colorStop.push([1, convertColor(rgb, alpha)]);
          break
        } else {
          colorStop.push([count / 100, convertColor(rgb, alpha)])
        }
      }
      return colorStop
    };
    var r = function(x, y, a, b, c, d, e, f) {
      var g = {};
      g.linearGradient = p(x, y, a, b, c);
      g.stops = q(d, e, f);
      if ('\v' === 'v') {
        if (2 * g.linearGradient[0] > a) {
          g.stops.reverse();
          for (var i = 0; i < g.stops.length; i += 1) {
            g.stops[i][0] = 1 - g.stops[i][0]
          }
        }
        if (g.stops[g.stops.length - 1][0] !== 1) {
          g.stops.push([1, g.stops[g.stops.length - 1][1]])
        }
        if (g.stops[0][0] !== 0) {
          g.stops.splice(0, 0, [0, g.stops[0][1]])
        }
      }
      return g
    };
    var s = function(a) {
      return FCFCC.highCharts[a]
    };
    var t = function(a) {
      var x, psum = 0, pareto = {
        yAxis : 1,
        data : [],
        type : 'line',
        color : 'rgba(00,00,00,1)',
        FCtype : 1.5
      }, sum = 0;
      if (a instanceof Array) {
        for (x = 0; x < a.length; x += 1) {
          sum += a[x].y
        }
        for (x = 0; x < a.length; x += 1) {
          psum += a[x].y;
          pareto.data.push({
                y : Math.round((psum / sum) * 10000) / 100
              })
        }
      }
      return pareto
    };
    var u = function(a) {
      var b = a.substring(a.indexOf('.swf'), 0);
      return b.substring(b.lastIndexOf('/') + 1)
    };
    var v = function(a, b, d) {
      d = d === undefined ? 1 : d;
      var e = {
        formatnumber : 1,
        formatnumberscale : 1,
        defaultnumberscale : '',
        numberscaleunit : 'K,M',
        numberscalevalue : '1000,1000',
        numberprefix : "",
        numbersuffix : "",
        decimalseparator : ".",
        thousandseparator : ",",
        indecimalseparator : "",
        inthousandseparator : "",
        decimals : "",
        forcedecimals : "0",
        yaxisvaluedecimals : "",
        sformatnumber : "1",
        sformatnumberscale : "0",
        sdefaultnumberscale : "",
        snumberscaleunit : "K,M",
        snumberscalevalue : "1000,1000",
        snumberprefix : "",
        snumbersuffix : "",
        sdecimals : "",
        sforcedecimals : "0",
        syaxisvaluedecimals : "0"
      };
      var f, numberScaleUnit, result, i, res, power, formatedNum = '', c = 0, initialVal, decimalVal, splitVal, decimalLength, last;
      for (i in b) {
        e[i.toLowerCase()] = b[i]
      }
      a = e.indecimalseparator !== '' ? a.toString().replace(
          e.indecimalseparator, '.') : a;
      a = e.inthousandseparator !== '' ? a.toString().replace(
          e.inthousandseparator, '') : a;
      if (d !== 1) {
        e.formatnumber = e.sformatnumber;
        e.formatnumberscale = e.sformatnumberscale;
        e.defaultnumberscale = e.sdefaultnumberscale;
        e.numberscaleunit = e.snumberscaleunit;
        e.numberscalevalue = e.snumberscalevalue;
        e.numberprefix = e.snumberprefix;
        e.numbersuffix = e.snumbersuffix;
        e.decimals = e.sdecimals;
        e.forcedecimals = e.sforcedecimals;
        e.yaxisvaluedecimals = e.syaxisvaluedecimals
      }
      f = e.numberscalevalue.split(',');
      numberScaleUnit = e.numberscaleunit.split(',');
      result = res = a.toString();
      if (e.formatnumber == 1) {
        if (res.indexOf('.') !== -1) {
          splitVal = res.split('.');
          initialVal = splitVal[0];
          decimalVal = '.' + splitVal[1]
        } else {
          initialVal = res;
          decimalVal = ''
        }
        for (i = initialVal.length; i > 0; i -= 1) {
          if (c % 3 === 0 && c !== 0) {
            formatedNum = e.thousandseparator + formatedNum;
            c = 0
          }
          formatedNum = res.charAt(i - 1) + formatedNum;
          c += 1
        }
        result = (splitVal === undefined) || (decimalVal === 0)
            ? formatedNum
            : formatedNum + decimalVal
      }
      if (e.formatnumberscale == 1) {
        res = a;
        for (i = 0; i < f.length && res / f[i] >= 1; i += 1) {
          res = res / f[i]
        }
        i -= 1;
        if (e.decimals === '') {
          e.decimals = '2'
        }
        power = Math.pow(10, e.decimals);
        result = (i === -1) ? Math.round(res * power) / power : Math.round(res
            * power)
            / power
      }
      if (e.forcedecimals == 1) {
        if (result.toString().indexOf(e.decimalseparator) !== -1) {
          decimalVal = result.toString().split(e.decimalseparator)[1];
          decimalLength = decimalVal.length
        } else {
          decimalLength = 0
        }
        if (decimalLength === 0) {
          result += e.decimalseparator
        }
        if (decimalLength > e.decimals) {
          if (e.decimals == 1 && decimalVal[0] >= 5) {
            last = result[result.substring(0, result.indexOf('.')).length - 1];
            last += 1;
            result = result.substring(0, (result.indexOf('.') - 1)) + last;
            result = result + '.' + '0'
          } else if (decimalVal[e.decimals - 1] >= 5) {
            last = decimalVal[e.decimals] >= 5 ? (parseInt(
                decimalVal[e.decimals - 1], 10) + 1) : decimalVal[e.decimals
                - 1];
            decimalVal = decimalVal.substring(0, e.decimals - 1) + last;
            result = result.substring(0, result.indexOf('.')) + '.'
                + decimalVal
          }
        } else {
          while (decimalLength < e.decimals) {
            result += '0';
            decimalLength += 1
          }
        }
      }
      if (e.formatnumberscale == 1) {
        result += (i === -1) ? e.defaultnumberscale : numberScaleUnit[i]
      }
      result = e.numberprefix + result + e.numbersuffix;
      if (e.decimalseparator !== "." && e.decimalseparator !== "") {
        result = result.toString().replace('.', e.decimalseparator)
      }
      return result
    };
    var w = function(a) {
      var x = 'circle';
      switch (a) {
        case 3 :
          x = 'triangle';
          break;
        case 4 :
          x = 'diamond';
          break;
        default :
          x = 'square';
          break
      }
      if (isNaN(a)) {
        x = 'circle'
      }
      return x
    };
    var A;
    var C = function(a, b) {
      var c = '', arr, chartId, sender;
      if ((a === 2 && this.link) || (a === 1 && this.options.chart.link)) {
        if (a === 2 && this.link) {
          c = b == '0' ? this.link : window.decodeURIComponent(this.link);
          c.replace(/^[\s]*/, '');
          arr = this.link.split('-');
          chartId = this.options.id;
          sender = M.core.items[chartId]
        } else if (a === 1 && this.options.chart.link) {
          c = b == '0' ? this.options.chart.link : window
              .decodeURIComponent(this.options.chart.link);
          c.replace(/^[ ]*/, '');
          arr = this.options.chart.link.split('-');
          chartId = this.options.chart.renderTo;
          sender = M.core.items[chartId]
        }
        switch (arr[0].toLowerCase()) {
          case 'n' :
            window.open(arr[1]);
            break;
          case 'f' :
            if (frames[arr[1]]) {
              frames[arr[1]].location = arr[2]
            } else {
              window.open(arr[2], arr[1])
            }
            break;
          case 'j' :
            try {
              window[arr[1]](arr[2])
            } catch (er) {
            }
            break;
          case 'p' :
            A = window.open(arr[2], arr[1].match(/[^,]+/i), arr[1].replace(
                    /[^,]+,/i, ''));
            if (window.focus) {
              A.focus()
            }
            break;
          case 'newchart' :
            var d = arr[1].toLowerCase().search('url') != -1
                ? 'URL'
                : FusionChartsDataFormats.JSON, data, x, chartJson, linkchartId;
            if (d === 'URL') {
              data = c.replace(/[^\-]+-[^\-]+-/i, '')
            } else {
              chartJson = M.core.items[chartId]
                  .getChartData(FusionChartsDataFormats.JSON);
              linkchartId = c.replace(/[^\-]+-[^\-]+-/i, '');
              if (chartJson.linkeddata) {
                for (x = 0; x < chartJson.linkeddata.length; x += 1) {
                  if (chartJson.linkeddata[x].id == linkchartId) {
                    data = chartJson.linkeddata[x].linkedchart
                  }
                }
              }
            }
            M.raiseEvent('LinkedChartInvoked', {
                  linkType : d,
                  data : data
                }, sender);
            break;
          default :
            arr = c.split(':');
            if (arr[0].toLowerCase() == 'javascript') {
              try {
                eval(arr[1])
              } catch (err) {
              }
            } else {
              window.location.href = c
            }
            break
        }
      }
    };
    var D = function(a) {
      var b = 0, x, y, temp;
      if (a instanceof Array) {
        for (x = 0; x < a.length; x += 1) {
          if (a[x].data instanceof Array) {
            for (y = 0; y < a[x].data.length; y += 1) {
              temp = parseInt(a[x].data[y].z, 10);
              b = (b > temp) ? b : temp
            }
          }
        }
      }
      return b
    };
    var E = function(a, b) {
      var c, max = 5;
      c = (a > b) ? b : a;
      if (c > 100) {
        max = c / 8
      }
      return max
    };
    var F = function(a, b) {
      var c = this.width, height = this.height, chart = u(this.src), id = this.id, jsonObj, container, dataComp, HCJson;
      removeChart(id, b);
      createContainer.call(this, a, id, c, height, b);
      dataComp = this.getChartData(FusionChartsDataFormats.JSON, true);
      jsonObj = dataComp.data;
      if (!FCFCC.highCharts[chart]) {
        HCJson = createMsg(id, 'ChartNotSupported', 'featurenotsupported')
      } else if (n[id].msgTxt) {
        HCJson = createMsg(id, 'msgTxt', undefined)
      } else if (this.jsVars && this.jsVars.LoadError) {
        HCJson = createMsg(id, 'LoadDataErrorText', undefined)
      } else if (this.jsVars && this.jsVars.stallLoad) {
        HCJson = createMsg(id, 'XMLLoadingText', undefined)
      } else if (dataComp.error instanceof Error) {
        HCJson = createMsg(id, 'InvalidXMLText', 'nodatatodisplay')
      } else {
        container = document.getElementById(id);
        HCJson = covertToFCC(id, chart, jsonObj, id, container.offsetWidth,
            container.offsetHeight);
        if (HCJson.series.length === 0) {
          HCJson = createMsg(id, 'NoDataText', 'nodatatodisplay')
        }
      }
      return HCJson
    };
    var H = function(a, b) {
      if (b.options.renderer !== 'javascript') {
        return
      }
      var c = FCFCC.method.getExternalInterfaceMethods(b.chartType())
          .split(','), i;
      for (i = 0; i < c.length; i += 1) {
        if (typeof a[c[i]] === 'function') {
          continue
        }
        if (FCFCC.method[c[i]] === undefined) {
          a[c[i]] = noEffect
        } else {
          a[c[i]] = FCFCC.method[c[i]]
        }
      }
    };
    function createChart(a, b) {
      var c = u(this.src), id = this.id;
      if (!(this.jsVars && this.jsVars.transparent)) {
        jQuery('#' + this.id).css('background-color', '#FFFFFF')
      }
      var d = document.getElementById(id);
      d.drawOverlayButton = drawOverlayButton;
      d.showChartMessage = showChartMessage;
      d.getExternalInterfaceMethods = FCFCC.method.getExternalInterfaceMethods;
      H(d, this);
      if (typeof a === 'function') {
        try {
          a({
                success : true,
                ref : d,
                id : id
              })
        } catch (err) {
        }
      }
      d.FCC = new Highcharts.Chart(b);
      var e = jQuery('.highcharts-grid')[0];
      var f = jQuery('.highcharts-grid')[1];
      if (e && f) {
        e.parentNode.insertBefore(f, e)
      }
      FCC.items[id] = {
        'baseObj' : b,
        'FCCObj' : d,
        'chartType' : c
      }
    }
    var I = function(c, d) {
      var e;
      clearTimeout(c.timeChach);
      e = M.core.items[d];
      c.timeChach = setTimeout((function(b) {
            return function() {
              var a = b.id, __containerId = b.options.containerElementId, HCJson;
              if (typeof __containerId !== 'undefined'
                  && typeof FCC.items[a] !== 'undefined') {
                HCJson = F.call(b, __containerId);
                HCJson.chart.events.load = function() {
                  M.raiseEvent('loaded', {}, b);
                  M.raiseEvent('resized', {}, b)
                };
                HCJson.plotOptions.series.animation = false;
                createChart.call(b, undefined, HCJson)
              }
            }
          }(e)), 500)
    };
    var J = function() {
      var a, FCCContainer, id;
      for (var x in FCC.items) {
        id = x;
        a = FCC.items[x];
        FCCContainer = document.getElementById(x);
        if (FCCContainer
            && (FCCContainer.offsetWidth != a.FCCObj.FCC.chartWidth || FCCContainer.offsetHeight != a.FCCObj.FCC.chartHeight)) {
          I(a, id)
        }
      }
    };
    if (window.addEventListener) {
      window.addEventListener("resize", J, false)
    } else if (window.attachEvent) {
      window.attachEvent("onresize", J)
    } else {
      window.onresize = J
    }
    var K = function(a) {
      return {
        FCconf : {
          negative : false,
          stackValue : []
        },
        chart : {
          alignTicks : false,
          renderTo : '',
          ignoreHiddenSeries : false,
          events : {
            click : function() {
              C.call(this, 1, a.chart.unescapelinks)
            }
          },
          margin : [15, 15, 50, 60],
          borderRadius : 0,
          plotBackgroundColor : '#FFFFFF'
        },
        colors : [],
        credits : {
          href : 'http://www.fusioncharts.com?BS=FCHSEvalMark',
          text : 'FusionCharts - HighCharts',
          enabled : N
        },
        global : {},
        labels : {
          items : []
        },
        lang : {},
        legend : {
          enabled : true,
          symbolWidth : 5,
          borderRadius : 0,
          itemStyle : {}
        },
        loading : {},
        plotOptions : {
          series : {
            borderColor : '#333333',
            events : {},
            dataLabels : {
              enabled : true,
              color : '#555555',
              style : {},
              formatter : function() {
                var x, y, showvalue = this.point.options.showvalue
                    || this.series.options.showvalue
                    || this.series.chart.options.chart.showvalue;
                if (this.series.type == 'pie') {
                  x = (a.chart.showlabels === '0' || !this.point.FCname
                      ? ''
                      : this.point.FCname);
                  y = showvalue === '1'
                      ? (Math.round(this.percentage * 100) / 100)
                          + (a.chart.showpercentagevalues === '1' ? '%' : '')
                      : '';
                  return parseStr(x
                      + (x !== '' && y !== '' ? a.chart.tooltipsepchar : '')
                      + y)
                } else if (showvalue === '1') {
                  if (this.point.options.displayvalue) {
                    x = this.point.options.displayvalue
                  } else {
                    x = v(this.y, a.chart, 1);
                    if (this.series.options.FCtype == 1.5
                        && this.series.type == 'line') {
                      x = this.y + '%'
                    }
                    if (this.series.options.FCtype == 7.5) {
                      x = ''
                    }
                  }
                  return parseStr(x)
                } else {
                  return ''
                }
              }
            },
            point : {
              events : {
                click : function() {
                  C.call(this, 2, a.chart.unescapelinks)
                }
              }
            }
          },
          area : {
            states : {
              hover : {
                enabled : false
              }
            },
            marker : {
              lineWidth : 1,
              radius : 3,
              states : {
                hover : {
                  enabled : false
                },
                select : {
                  enabled : false
                }
              }
            }
          },
          areaspline : {
            states : {
              hover : {
                enabled : false
              }
            },
            marker : {
              lineWidth : 1,
              radius : 3,
              states : {
                hover : {
                  enabled : false
                },
                select : {
                  enabled : false
                }
              }
            }
          },
          line : {
            states : {
              hover : {
                enabled : false
              }
            },
            marker : {
              lineWidth : 1,
              radius : 3,
              states : {
                hover : {
                  enabled : false
                },
                select : {
                  enabled : false
                }
              }
            }
          },
          spline : {
            states : {
              hover : {
                enabled : false
              }
            },
            marker : {
              lineWidth : 1,
              radius : 3,
              states : {
                hover : {
                  enabled : false
                },
                select : {
                  enabled : false
                }
              }
            }
          },
          pie : {
            size : '80%',
            allowPointSelect : true,
            cursor : 'pointer'
          },
          column : {}
        },
        point : {},
        series : [{}],
        subtitle : {
          text : '',
          style : {}
        },
        symbols : [],
        title : {
          text : '',
          style : {}
        },
        toolbar : {},
        tooltip : {
          borderRadius : 0,
          style : {},
          formatter : function() {
            var x = '', charSep = a.chart.tooltipsepchar;
            if (this.point.options.tooltext) {
              x = this.point.options.tooltext
            } else {
              if (this.series.options.FCtype >= 2 && this.series.name !== ' ') {
                x += this.series.name + charSep
              }
              x += this.x ? this.x + charSep : '';
              if (this.series.options.FCtype == 1.5
                  && this.series.type == 'line') {
                x = this.x + charSep + this.y + '%'
              } else if (this.series.type == 'pie') {
                x = (this.point.FCname ? this.point.FCname + charSep : '')
                    + (Math.round(this.percentage * 100) / 100)
                    + (a.chart.showpercentintooltip === '0' ? '' : '%')
              } else if (this.series.options.FCtype === 2.5) {
                x = v(this.y, a.chart, 1)
              } else {
                x += v(this.y, a.chart, 1)
              }
              if (this.point.z) {
                x += charSep + this.point.z
              }
            }
            return parseStr(x)
          }
        },
        xAxis : {
          labels : {
            rotation : -25,
            style : {},
            formatter : function() {
              return parseStr(typeof this.value === 'string' ? this.value : '')
            },
            align : 'right'
          },
          categories : [],
          plotLines : [],
          plotBands : [],
          title : {
            style : {},
            text : ''
          }
        },
        yAxis : [{
              startOnTick : false,
              endOnTick : false,
              title : {
                style : {},
                text : ''
              },
              labels : {
                style : {},
                formatter : function() {
                  return parseStr(v(this.value, a.chart, 1))
                }
              },
              plotBands : [],
              plotLines : []
            }, {
              gridLineWidth : 0,
              startOnTick : false,
              endOnTick : false,
              title : {
                style : {},
                text : ''
              },
              labels : {
                style : {},
                enabled : false,
                formatter : function() {
                  return parseStr(v(this.value, a.chart, 2))
                }
              },
              opposite : true
            }],
        exporting : {
          buttons : {
            exportButton : {},
            printButton : {
              enabled : false
            }
          }
        }
      }
    };
    function addVline(a, b, c, d, e) {
      a.xAxis.plotLines.push({
            color : convertColor(b || '#444444', c || 100),
            width : d ? d : 1,
            value : e
          })
    }
    function addPoint(a, b, c, d, e, f, g, h, i) {
      var x, y, isAbs = FCFCC.valueAbs[d], value, seriesType = a.type
          || f.chart.defaultSeriesType, dataseperator, tempY, dataYmax, dataYmin, loopMax;
      if (!a.yAxis) {
        dataYmax = 'dataY0max';
        dataYmin = 'dataY0min'
      } else {
        dataYmax = 'dataY' + a.yAxis + 'max';
        dataYmin = 'dataY' + a.yAxis + 'min'
      }
      if (c < 7 && c >= 2 && c != 2.5) {
        loopMax = f.xAxis.categories.length
      } else {
        loopMax = b.length
      }
      if (b instanceof Array) {
        for (y = 0; y < loopMax; y += 1) {
          if (typeof b[y] === 'object') {
            if (!b[y].vline) {
              if (a.cursor != 'pointer' && b[y].link) {
                a.cursor = 'pointer'
              }
              tempY = (isAbs
                  ? Math.abs(parseFloat(b[y].value || b[y].y))
                  : parseFloat(b[y].value || b[y].y));
              if (tempY < 0) {
                f.FCconf.negative = true
              }
              if (typeof f.FCconf[dataYmax] === 'undefined'
                  || tempY > f.FCconf[dataYmax]) {
                f.FCconf[dataYmax] = tempY
              }
              if (typeof f.FCconf[dataYmin] === 'undefined'
                  || tempY < f.FCconf[dataYmin]) {
                f.FCconf[dataYmin] = tempY
              }
              if (typeof f.FCconf.stackValue[y] === 'undefined') {
                f.FCconf.stackValue[y] = tempY
              } else {
                f.FCconf.stackValue[y] += tempY
              }
              a.data.push({
                y : tempY || 0,
                x : (isAbs ? Math.abs(parseFloat(b[y].x)) : parseFloat(b[y].x))
                    || undefined,
                z : (isAbs ? Math.abs(parseFloat(b[y].z)) : parseFloat(b[y].z))
                    || undefined,
                color : (c < 2 || b[y].color || b[y].alpha)
                    ? convertColor(b[y].color || (c < 2 && g(y)), b[y].alpha,
                        a.color)
                    : undefined,
                FCname : c < 2 ? b[y].label : undefined,
                link : b[y].link,
                sliced : b[y].issliced == '1',
                id : e,
                displayvalue : b[y].displayvalue,
                showvalue : b[y].showvalue,
                tooltext : b[y].tooltext,
                marker : (seriesType === 'areaspline'
                    || seriesType === 'spline' || seriesType === 'area' || seriesType === 'line')
                    ? {
                      enabled : b[y].drawanchors ? (b[y].drawanchors == '1'
                          ? true
                          : false) : undefined,
                      radius : b[y].anchorradius
                          ? b[y].anchorradius
                          : undefined,
                      symbol : w(parseInt(b[y].anchorsides, 10)),
                      fillColor : b[y].anchorbgcolor ? convertColor(
                          b[y].anchorbgcolor || 'FFFFFF', b[y].anchorbgalpha
                              || 100) : undefined,
                      lineColor : b[y].anchorbordercolor ? convertColor(
                          b[y].anchorbordercolor || '767575', b[y].anchoralpha
                              || 100) : undefined,
                      lineWidth : b[y].anchorborderthickness
                          ? b[y].anchorborderthickness
                          : undefined
                    }
                    : (c === 7.5 ? {
                      radius : b[y].z
                          ? Math.round((b[y].z / h) * 10) / 10
                          : undefined
                    } : null)
              });
              if (c < 2) {
                f.xAxis.categories.push(b[y].showlabel === '0'
                    ? ''
                    : (b[y].label || ''))
              }
            } else if (c < 2) {
              addVline(f, b[y].color, b[y].alpha, b[y].thickness, y - 0.5)
            }
          } else if (typeof b[y] === 'string' && i.chart.compactdatamode == '1') {
            dataseperator = i.chart.dataseparator || '|';
            value = b[y].split(dataseperator);
            for (x = 0; x < value.length; x += 1) {
              tempY = isAbs
                  ? Math.abs(parseFloat(value[x]))
                  : parseFloat(value[x]);
              if (tempY < 0) {
                f.FCconf.negative = true
              }
              if (typeof f.FCconf[dataYmax] === 'undefined'
                  || tempY > f.FCconf[dataYmax]) {
                f.FCconf[dataYmax] = tempY
              }
              if (typeof f.FCconf[dataYmin] === 'undefined'
                  || tempY < f.FCconf[dataYmin]) {
                f.FCconf[dataYmin] = tempY
              }
              a.data.push({
                    y : tempY || 0
                  })
            }
          } else {
            a.data.push({
                  y : 0
                })
          }
        }
      }
    }
    function addCategory(a, b, c) {
      var x, dataseperator, countCat = 0, zoomCat = [];
      if (a.categories && a.categories[0].category) {
        for (x = 0; x < a.categories[0].category.length; x += 1) {
          if (typeof a.categories[0].category[x] === 'object') {
            if (!a.categories[0].category[x].vline) {
              if (b == 2.5) {
                zoomCat.push(a.categories[0].category[x].label
                    ? a.categories[0].category[x].label
                    : '')
              } else {
                c.xAxis.categories.push(a.categories[0].category[x].label
                    ? a.categories[0].category[x].label
                    : '')
              }
              countCat += 1
            } else {
              addVline(c, a.categories[0].category[x].color,
                  a.categories[0].category[x].alpha,
                  a.categories[0].category[x].thickness, countCat - 0.5)
            }
          } else if (typeof a.categories[0].category[x] === 'string'
              && a.chart.compactdatamode == '1') {
            dataseperator = a.chart.dataseparator ? a.chart.dataseparator : '|';
            if (b == 2.5) {
              zoomCat = zoomCat.concat(a.categories[0].category[x]
                  .split(dataseperator))
            } else {
              c.xAxis.categories = c.xAxis.categories
                  .concat(a.categories[0].category[x].split(dataseperator))
            }
          }
        }
      }
      if (b === 2.5) {
        c.xAxis.maxZoom = 2;
        c.chart.zoomType = 'x';
        c.chart.showvalue = a.chart.showvalues === '1' ? '1' : '0';
        c.xAxis.categories = undefined;
        c.xAxis.min = 0;
        c.xAxis.max = zoomCat.length - 1;
        c.xAxis.endOnTick = false;
        c.xAxis.labels.formatter = function() {
          return parseStr(zoomCat[this.value])
        }
      }
    }
    function MSStacked(b, c, d, e, f, g, h, i) {
      var x, y, z, newSeries, count_set = 0, max_cat = 0, a = [], plotWidth = f
          - (e.chart.margin[1] + e.chart.margin[3]), plotHight = g
          - (e.chart.margin[0] + e.chart.margin[2]), noStack, pointWidth, catWidth, tempheight, maxHight = 0, pointValue = 0;
      if (b.categories && b.categories[0] && b.categories[0].category) {
        max_cat = b.categories[0].category.length
      }
      if (b.dataset && b.dataset instanceof Array) {
        noStack = b.dataset.length;
        catWidth = plotWidth / max_cat;
        pointWidth = catWidth / (noStack + 2);
        for (x = 0; x < b.dataset.length; x += 1) {
          tempheight = [];
          if (b.dataset[x].dataset && b.dataset[x].dataset instanceof Array) {
            for (y = 0; y < b.dataset[x].dataset.length; y += 1) {
              newSeries = {
                FCtype : c,
                type : b.dataset[x].dataset[y].renderas
                    ? FCFCC.combi[b.dataset[x].dataset[y].renderas
                        .toLowerCase()]
                    : undefined,
                name : b.dataset[x].dataset[y].seriesname
                    ? b.dataset[x].dataset[y].seriesname
                    : ' ',
                data : [],
                color : convertColor(b.dataset[x].color || i(count_set),
                    b.dataset[x].dataset[y].alpha || 100),
                yAxis : b.dataset[x].dataset[y].parentyaxis == 'S'
                    ? 1
                    : undefined,
                showvalue : b.dataset[x].dataset[y].showvalues,
                mColum : x,
                mStack : y
              };
              if (b.dataset[x].dataset[y].data instanceof Array) {
                for (z = 0; z < max_cat; z += 1) {
                  tempheight[z] = tempheight[z] ? tempheight[z] : 0;
                  pointValue = (b.dataset[x].dataset[y].data[z] && b.dataset[x].dataset[y].data[z].value)
                      ? parseFloat(b.dataset[x].dataset[y].data[z].value)
                      : '';
                  tempheight[z] += pointValue ? pointValue : 0;
                  newSeries.data.push({
                        MWidth : pointWidth,
                        MX : (z * catWidth) + ((x + 1) * pointWidth),
                        MY : tempheight[z],
                        y : pointValue,
                        link : b.dataset[x].dataset[y].data[z].link,
                        id : h,
                        color : b.dataset[x].dataset[y].data[z].color
                            ? convertColor(
                                b.dataset[x].dataset[y].data[z].color
                                    || i(count_set),
                                b.dataset[x].dataset[y].data[z].alpha || 100)
                            : undefined
                      })
                }
              }
              a.push(newSeries);
              count_set += 1
            }
          }
          for (z = 0; z < max_cat; z += 1) {
            if (maxHight < tempheight[z]) {
              maxHight = tempheight[z]
            }
          }
        }
      }
      e.yAxis[0].max = maxHight + 5;
      return a
    }
    function addData(c, d, e, f, g, h, i) {
      var a = [], x, y, z, count_set, getScolor, pareto, yCalTemp;
      getScolor = function(a) {
        var b;
        b = (c.chart.palettecolors)
            ? ((typeof c.chart.palettecolors === 'string')
                ? c.chart.palettecolors.split(',')
                : c.chart.palettecolors)
            : FCFCC.color;
        return b[a % b.length]
      };
      switch (d) {
        case 1 :
        case 1.5 :
          if (d == 1.5) {
            f.yAxis[1].max = 100;
            f.yAxis[1].labels.formatter = function() {
              return parseStr(this.value + '%')
            };
            if (c.data instanceof Array) {
              c.data.sort(function(a, b) {
                    return parseFloat(b.value) - parseFloat(a.value)
                  })
            }
          }
          f.legend.enabled = false;
          if (c.data) {
            z = createSeries(d);
            addPoint(z, c.data, d, e, i, f, getScolor);
            if (s(e) == 'pie') {
              z.data.reverse();
              z.color = undefined;
              f.chart.plotBorderWidth = 0;
              x = f.chart.borderWidth + 1;
              f.chart.margin = [f.chart.margin[0], x, x, x]
            }
            a.push(z);
            if ((e == 'Pareto2D' || e == 'Pareto3D')
                && c.chart.showcumulativeline !== '0') {
              pareto = t(z.data);
              a.push(pareto)
            }
          }
          break;
        case 2 :
        case 2.2 :
        case 2.5 :
        case 3 :
        case 4 :
        case 5 :
        case 5.5 :
        case 6 :
        case 6.5 :
          switch (d) {
            case 2.2 :
              f.yAxis[0].reversed = true;
              f.yAxis[0].PCreversed = true;
              break;
            case 3 :
              if (c.chart.stack100percent == '1') {
                f.plotOptions.series.stacking = 'percent';
                f.yAxis[0].labels.formatter = function() {
                  return parseStr(this.value + '%')
                }
              } else {
                f.plotOptions.series.stacking = 'normal'
              }
              break;
            case 5.5 :
              f.plotOptions.column.stacking = c.chart.stack100percent == '1'
                  ? 'percent'
                  : 'normal'
          }
          addCategory(c, d, f);
          if (d !== 6) {
            if (c.dataset) {
              count_set = 0;
              for (x = 0; x < c.dataset.length; x += 1) {
                z = createSeries(
                    d,
                    convertColor(c.dataset[x].color || getScolor(count_set),
                        c.dataset[x].alpha || 100),
                    c.dataset[x].renderas
                        ? FCFCC.combi[c.dataset[x].renderas.toLowerCase()]
                        : ((c.dataset[x].parentyaxis == 'S' && (d == 5 || d == 5.5))
                            ? 'line'
                            : undefined), c.dataset[x].seriesname,
                    c.dataset[x].parentyaxis == 'S', c.dataset[x].showvalues,
                    c.dataset[x].plotbordercolor ? convertColor(
                        c.dataset[x].plotbordercolor,
                        c.dataset[x].plotborderalpha || 95) : undefined,
                    parseInt(c.dataset[x].plotborderthickness
                            || c.dataset[x].linethickness, 10)
                        || undefined);
                var j = z.type || f.chart.defaultSeriesType;
                z.marker = (j === 'area' || j === 'line' || j === 'spline' || j === 'areaspline')
                    ? {
                      enabled : c.dataset[x].drawanchors
                          ? (c.dataset[x].drawanchors == '1' ? true : false)
                          : undefined,
                      radius : c.dataset[x].anchorradius
                          ? c.dataset[x].anchorradius
                          : undefined,
                      symbol : w(parseInt(c.dataset[x].anchorsides, 10)),
                      fillColor : c.dataset[x].anchorbgcolor ? convertColor(
                          c.dataset[x].anchorbgcolor || 'FFFFFF',
                          c.dataset[x].anchorbgalpha || 100) : undefined,
                      lineColor : c.dataset[x].anchorbordercolor
                          ? convertColor(c.dataset[x].anchorbordercolor
                                  || '767575', c.dataset[x].anchoralpha || 100)
                          : undefined,
                      lineWidth : c.dataset[x].anchorborderthickness
                          ? c.dataset[x].anchorborderthickness
                          : undefined
                    }
                    : null;
                count_set += 1;
                if (c.dataset[x].data) {
                  addPoint(z, c.dataset[x].data, d, e, i, f, undefined,
                      undefined, c)
                }
                a.push(z)
              }
              if (d == 3 || d == 5.5 || s(e) == 'bar') {
                var k = [];
                for (x = 0; x < a.length; x += 1) {
                  if (a[x].type) {
                    k.push(a[x])
                  } else {
                    k.splice(0, 0, a[x])
                  }
                }
                a = k;
                f.legend.reversed = true
              }
            }
          } else {
            a = MSStacked(c, d, e, f, g, h, i, getScolor)
          }
          break;
        case 7 :
        case 7.5 :
          f.chart.showvalue = c.chart.showvalues == '1' ? '1' : '0';
          if (c.categories && c.categories[0] && c.categories[0].category) {
            for (x = 0; x < c.categories[0].category.length; x += 1) {
              if (c.categories[0].category[x].showverticalline
                  && c.categories[0].category[x].showverticalline == '1') {
                addVline(f, c.categories[0].verticallinecolor,
                    c.categories[0].verticallinealpha,
                    c.categories[0].verticallinethickness,
                    c.categories[0].category[x].x)
              }
              f.xAxis.categories[c.categories[0].category[x].x] = c.categories[0].category[x].label
                  ? c.categories[0].category[x].label
                  : ''
            }
          }
          var l = D(c.dataset) / E(g, h);
          if (c.dataset) {
            count_set = 0;
            for (x = 0; x < c.dataset.length; x += 1) {
              z = createSeries(
                  d,
                  convertColor(c.dataset[x].color || getScolor(count_set),
                      c.dataset[x].alpha || 100),
                  c.dataset[x].renderas
                      ? FCFCC.combi[c.dataset[x].renderas]
                      : ((c.dataset[x].parentyaxis == 'S' && (d == 5 || d == 5.5))
                          ? 'line'
                          : undefined), c.dataset[x].seriesname,
                  c.dataset[x].parentyaxis == 'S', c.dataset[x].showvalues,
                  undefined, undefined);
              z.marker = {
                symbol : (d == 7.5) ? 'circle' : w(parseInt(
                    c.dataset[x].anchorsides, 10)),
                states : {
                  hover : {
                    enabled : false
                  }
                }
              };
              count_set += 1;
              if (c.dataset[x].data) {
                addPoint(z, c.dataset[x].data, d, e, i, f, getScolor, l)
              }
              a.push(z)
            }
          }
          f.xAxis.max = c.chart.xaxismaxvalue ? parseInt(c.chart.xaxismaxvalue,
              10) : undefined;
          f.xAxis.min = c.chart.xaxisminvalue ? parseInt(c.chart.xaxisminvalue,
              10) : undefined;
          f.xAxis.showLastLabel = true;
          break;
        default :
          break
      }
      if (!((d === 3 || d === 5.5) && c.chart.stack100percent === '1')
          && e !== 'Marimekko') {
        if (d === 3 || d === 5.5) {
          f.FCconf.dataY0max = f.FCconf.stackValue[0];
          f.FCconf.dataY0min = f.FCconf.stackValue[0];
          for (y = 1; y < f.FCconf.stackValue.length; y += 1) {
            if (f.FCconf.stackValue[y] > f.FCconf.dataY0max) {
              f.FCconf.dataY0max = f.FCconf.stackValue[y]
            }
            if (f.FCconf.stackValue[y] < f.FCconf.dataY0min) {
              f.FCconf.dataY0min = f.FCconf.stackValue[y]
            }
          }
        }
        if (d === 1.5 || d === 5.5 || d === 5 || d === 6.5) {
          yCalTemp = o(f.FCconf.dataY0max, f.FCconf.dataY0min,
              c.chart.pyaxismaxvalue, c.chart.pyaxisminvalue, '',
              c.chart.setadaptiveymin !== '1');
          f.yAxis[0].max = yCalTemp.Max;
          f.yAxis[0].min = yCalTemp.Min;
          if (d !== 1.5) {
            yCalTemp = o(f.FCconf.dataY1max, f.FCconf.dataY1min,
                c.chart.syaxismaxvalue, c.chart.syaxisminvalue, '',
                c.chart.setadaptivesymin !== '1');
            f.yAxis[1].max = yCalTemp.Max;
            f.yAxis[1].min = yCalTemp.Min
          }
        } else {
          yCalTemp = o(f.FCconf.dataY0max, f.FCconf.dataY0min,
              c.chart.yaxismaxvalue, c.chart.yaxisminvalue, '',
              c.chart.setadaptiveymin !== '1');
          f.yAxis[0].max = yCalTemp.Max;
          f.yAxis[0].min = yCalTemp.Min
        }
      }
      f.series = a
    }
    function ModyfyLegend(b, c) {
      var d = b.series.length, legendPos, legendWidth, legendHeight;
      if (c.chart.showlegend == '0') {
        b.legend.enabled = false
      } else {
        b.legend.labelFormatter = function() {
          return parseStr(this.name)
        };
        if (c.chart.interactivelegend == '0') {
          b.plotOptions.series.events.legendItemClick = function(a) {
            return false
          };
          b.legend.itemStyle.cursor = 'default'
        }
        b.legend.shadow = c.chart.legendshadow == '0' ? false : true;
        b.legend.backgroundColor = convertColor(c.chart.legendbgcolor
                || '#ffffff', c.chart.legendbgalpha || 100);
        b.legend.borderColor = convertColor(c.chart.legendbordercolor
                || '#545454', c.chart.legendborderalpha || 100);
        b.legend.borderWidth = c.chart.legendborderthickness || 1;
        if (c.reverselegend == '1') {
          b.legend.reversed = !b.legend.reversed
        }
        if (c.chart.legendposition == 'RIGHT') {
          b.legend.verticalAlign = 'middle';
          b.legend.align = 'right';
          b.legend.width = 70;
          b.legend.x = -15;
          b.chart.margin[1] += 85
        } else {
          b.legend.x = 0;
          b.chart.margin[2] += 46
        }
      }
    }
    function createText(a, b, c) {
      return {
        html : a,
        style : {
          left : c + 'px',
          top : b + 'px'
        }
      }
    }
    function convertMarimeko(a, b, c, d, e) {
      var f = c - (a.chart.margin[1] + a.chart.margin[3]), plotHight = d
          - (a.chart.margin[0] + a.chart.margin[2]), y, z, arr = [], total = 0, temp, setPersent = false, catCountFlag = true, temp2, totalpercent = 0;
      if (a.xAxis.labels.enabled === false
          && b.chart.showxaxispercentvalues != '0') {
        a.xAxis.title.margin += 15;
        a.chart.margin[2] += 15
      }
      if (a.xAxis.labels.enabled !== false
          && b.chart.showxaxispercentvalues != '0') {
        plotHight += 15
      }
      if (e && e[0] && e[0].category instanceof Array) {
        temp = 0;
        for (y = 0; y < e[0].category.length; y += 1) {
          if (e[0].category[y].widthpercent) {
            temp += parseFloat(e[0].category[y].widthpercent)
          } else {
            break
          }
        }
        if (y === e[0].category.length && Math.round(temp) === 100) {
          setPersent = true
        }
      }
      for (y = 0; y < a.series.length; y += 1) {
        for (z = 0; z < a.series[y].data.length; z += 1) {
          if (typeof a.series[y].data[z] == 'object') {
            temp = parseFloat(a.series[y].data[z].y)
          } else {
            temp = parseFloat(a.series[y].data[z])
          }
          arr[z] = arr[z] ? arr[z] + temp : temp;
          total += temp
        }
      }
      for (y = 0; y < a.series.length; y += 1) {
        temp = 0;
        for (z = 0; z < a.series[y].data.length; z += 1) {
          if (typeof a.series[y].data[z] !== 'object') {
            a.series[y].data[z] = {
              y : a.series[y].data[z]
            }
          }
          a.series[y].data[z].MX = temp;
          if (catCountFlag) {
            if (a.xAxis.labels.enabled !== false) {
              a.labels.items.push(createText(a.xAxis.categories[z], plotHight,
                  temp))
            }
            if (b.chart.showsum != '0') {
              a.labels.items.push(createText(v(arr[z], b.chart), '-14', temp))
            }
          }
          temp2 = setPersent
              ? parseFloat(e[0].category[z].widthpercent) / 100
              : (arr[z] / total);
          totalpercent += temp2;
          temp += a.series[y].data[z].MWidth = Math.round(f * temp2);
          if (catCountFlag && b.chart.showxaxispercentvalues != '0'
              && totalpercent < 0.9) {
            a.labels.items.push(createText(
                (Math.round(totalpercent * 10000) / 100) + '%', plotHight - 15,
                temp - 20))
          }
        }
        catCountFlag = false
      }
      a.xAxis.labels.enabled = false
    }
    function covertToFCC(a, b, c, d, e, f) {
      var g, y = getSeriesName(b), x, z, l, j, styleName, tempstyle = {}, styleArr;
      c.chart = c.chart || c.graph || {};
      delete c.graph;
      c.chart.tooltipsepchar = c.chart.tooltipsepchar || ',';
      g = K(c);
      g.chart.renderTo = a;
      g.chart.defaultSeriesType = s(b);
      if (g.chart.defaultSeriesType === 'line'
          || g.chart.defaultSeriesType === 'spline'
          || g.chart.defaultSeriesType === 'area'
          || g.chart.defaultSeriesType === 'areaspline') {
        g.xAxis.startOnTick = true;
        g.xAxis.endOnTick = true;
        g.xAxis.showLastLabel = true
      }
      g.plotOptions.series.shadow = c.chart.showshadow === '1';
      if (b == 'Doughnut2D' || b == 'Doughnut3D') {
        g.plotOptions.pie.innerSize = '50%'
      }
      if (c.chart.clickurl) {
        g.chart.link = c.chart.clickurl;
        g.chart.id = d
      }
      g.plotOptions.series.animation = c.chart.animation === '0' ? false : true;
      if (c.chart.showlabels == '0') {
        g.xAxis.labels.enabled = false;
        g.chart.margin[2] = 15
      }
      if (c.chart.showyaxisvalues == '0' || c.chart.showdivlinevalues == '0'
          || c.chart.showdivlinevalue == '0') {
        g.yAxis[0].labels.enabled = false;
        g.chart.margin[3] = 15
      }
      if (((y == 5 || y == 5.5) && c.chart.showyaxisvalues != '0' && c.chart.showdivlinesecondaryvalue != '0')
          || (y === 1.5 && c.chart.showdivlinesecondaryvalue != '0')) {
        g.yAxis[1].labels.enabled = true;
        g.chart.margin[1] = 50
      }
      g.xAxis.labels.style = {
        fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
        fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
            + 'px',
        color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
            || '#555555'
      };
      g.yAxis[0].labels.style = {
        fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
        fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
            + 'px',
        color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
            || '#555555'
      };
      g.yAxis[1].labels.style = {
        fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
        fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
            + 'px',
        color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
            || '#555555'
      };
      g.legend.itemStyle = {
        fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
        fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
            + 'px',
        color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
            || '#555555'
      };
      g.plotOptions.series.dataLabels.style = {
        fontFamily : c.chart.basefont || 'Verdana',
        fontSize : (c.chart.basefontsize || '10') + 'px',
        color : c.chart.basefontcolor || '#555555'
      };
      g.tooltip.style = {
        fontFamily : c.chart.basefont || 'Verdana',
        fontSize : (c.chart.basefontsize || '10') + 'px',
        color : c.chart.basefontcolor || '#555555'
      };
      if (c.chart.drawanchors == '0') {
        g.plotOptions.area.marker.enabled = g.plotOptions.line.marker.enabled = g.plotOptions.areaspline.marker.enabled = g.plotOptions.spline.marker.enabled = false;
        g.tooltip.enabled = false
      }
      if (c.chart.anchorradius) {
        g.plotOptions.area.marker.radius = g.plotOptions.line.marker.radius = g.plotOptions.areaspline.marker.radius = g.plotOptions.spline.marker.radius = c.chart.anchorradius
      }
      g.plotOptions.line.marker.lineColor = g.plotOptions.areaspline.marker.lineColor = g.plotOptions.spline.marker.lineColor = convertColor(
          c.chart.anchorbordercolor || '767575', c.chart.anchoralpha || 100);
      g.plotOptions.area.marker.lineColor = convertColor(
          c.chart.anchorbordercolor || '767575', c.chart.anchoralpha || 0);
      if (c.chart.anchorborderthickness) {
        g.plotOptions.area.marker.lineWidth = g.plotOptions.line.marker.lineWidth = g.plotOptions.areaspline.marker.lineWidth = g.plotOptions.spline.marker.lineWidth = c.chart.anchorborderthickness
      }
      g.plotOptions.line.marker.fillColor = g.plotOptions.spline.marker.fillColor = convertColor(
          c.chart.anchorbgcolor || 'FFFFFF', c.chart.anchorbgalpha || 100);
      g.plotOptions.area.marker.fillColor = g.plotOptions.areaspline.marker.fillColor = convertColor(
          c.chart.anchorbgcolor || 'FFFFFF', c.chart.anchorbgalpha || 0);
      if (c.chart.anchorsides) {
        g.plotOptions.area.marker.symbol = g.plotOptions.line.marker.symbol = g.plotOptions.areaspline.marker.symbol = g.plotOptions.spline.marker.symbol = w(parseInt(
            c.chart.anchorsides, 10))
      }
      g.plotOptions.line.lineWidth = g.plotOptions.spline.lineWidth = parseInt(
          c.chart.linethickness, 10)
          || (y === 1.5 ? 2 : 3);
      g.plotOptions.line.color = g.plotOptions.spline.color = convertColor(
          c.chart.linecolor || '767575', c.chart.linealpha || 100);
      g.plotOptions.area.color = g.plotOptions.areaspline.color = convertColor(
          c.chart.plotfillcolor || '767575', c.chart.plotfillalpha || 90);
      g.plotOptions.area.lineColor = g.plotOptions.areaspline.lineColor = convertColor(
          c.chart.plotbordercolor || "333333", c.chart.plotborderalpha || 95);
      g.plotOptions.area.lineWidth = g.plotOptions.areaspline.lineWidth = parseInt(
          c.chart.plotborderthickness, 10)
          || 1;
      g.yAxis[0].alternateGridColor = convertColor(c.chart.alternatehgridcolor
              || 'EEEEEE', c.chart.alternatehgridalpha || 50);
      g.yAxis[0].gridLineColor = convertColor(c.chart.divlinecolor || '717170',
          c.chart.divlinealpha || 40);
      g.yAxis[0].gridLineWidth = c.chart.divlinethickness
          ? c.chart.divlinethickness
          : 1;
      if (c.chart.caption) {
        g.title.text = parseStr(c.chart.caption);
        g.chart.margin[0] = 35;
        g.title.style = {
          fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
          fontSize : '13px',
          'font-weight' : 'bold',
          color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
              || '#555555'
        }
      }
      if (c.chart.subcaption) {
        g.subtitle.text = parseStr(c.chart.subcaption);
        g.chart.margin[0] = 55;
        g.subtitle.style = {
          fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
          fontSize : '11px',
          'font-weight' : 'bold',
          color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
              || '#555555'
        }
      }
      if (c.chart.xaxisname) {
        g.xAxis.title.text = parseStr(c.chart.xaxisname);
        g.xAxis.title.margin = g.chart.margin[2];
        g.chart.margin[2] += 20;
        g.xAxis.title.style = {
          fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
          fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
              + 'px',
          'font-weight' : 'bold',
          color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
              || '#555555'
        }
      }
      if (y == 5 || y == 5.5 || y == 1.5) {
        if (c.chart.pyaxisname) {
          g.yAxis[0].title.text = parseStr(c.chart.pyaxisname);
          g.yAxis[0].title.margin = g.chart.margin[3];
          g.chart.margin[3] += 20;
          g.yAxis[0].title.style = {
            fontFamily : c.chart.outcnvbasefont || c.chart.basefont
                || 'Verdana',
            fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
                + 'px',
            'font-weight' : 'bold',
            color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
                || '#555555'
          }
        }
        if (c.chart.syaxisname) {
          g.yAxis[1].title.text = parseStr(c.chart.syaxisname);
          g.yAxis[1].title.margin = g.chart.margin[1];
          g.chart.margin[1] += 20;
          g.yAxis[1].title.style = {
            fontFamily : c.chart.outcnvbasefont || c.chart.basefont
                || 'Verdana',
            fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
                + 'px',
            'font-weight' : 'bold',
            color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
                || '#555555'
          }
        }
      } else if (c.chart.yaxisname) {
        g.yAxis[0].title.text = parseStr(c.chart.yaxisname);
        g.yAxis[0].title.margin = g.chart.margin[3];
        g.chart.margin[3] += 20;
        g.yAxis[0].title.style = {
          fontFamily : c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
          fontSize : (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10')
              + 'px',
          'font-weight' : 'bold',
          color : c.chart.outcnvbasefontcolor || c.chart.basefontcolor
              || '#555555'
        }
      }
      if (c.chart.showtooltip == '0') {
        g.tooltip.enabled = false
      }
      g.tooltip.backgroundColor = convertColor(c.chart.tooltipbgcolor
              || 'FFFFFF', c.chart.tooltipbgalpha || 100);
      g.tooltip.borderColor = convertColor(c.chart.tooltipbordercolor
              || '545454', c.chart.tooltipborderalpha || 100);
      g.tooltip.shadow = c.chart.showtooltipshadow == '1' ? true : false;
      g.chart.showvalue = c.chart.showvalues == '0' ? '0' : '1';
      if (c.trendlines) {
        for (x = 0; x < c.trendlines.length; x += 1) {
          if (c.trendlines[x].line) {
            for (z = 0; z < c.trendlines[x].line.length; z += 1) {
              if (c.trendlines[x].line[z].istrendzone == '1') {
                g.yAxis[0].plotBands.push({
                      color : convertColor(c.trendlines[x].line[z].color
                              || '333333', c.trendlines[x].line[z].alpha || 99),
                      from : c.trendlines[x].line[z].startvalue
                          ? c.trendlines[x].line[z].startvalue
                          : 0,
                      to : c.trendlines[x].line[z].endvalue
                    })
              }
              g.yAxis[0].plotLines.push({
                    color : convertColor(c.trendlines[x].line[z].color
                            || '333333', c.trendlines[x].line[z].alpha || 99),
                    value : c.trendlines[x].line[z].startvalue
                        ? c.trendlines[x].line[z].startvalue
                        : 0,
                    width : c.trendlines[x].line[z].thickness
                        ? c.trendlines[x].line[z].thickness
                        : 1
                  })
            }
          }
        }
      }
      if (c.vtrendlines) {
        for (x = 0; x < c.vtrendlines.length; x += 1) {
          if (c.vtrendlines[x].line) {
            for (z = 0; z < c.vtrendlines[x].line.length; z += 1) {
              if (c.vtrendlines[x].line[z].istrendzone !== '0') {
                g.xAxis.plotBands.push({
                      color : convertColor(c.vtrendlines[x].line[z].color
                              || '333333', c.vtrendlines[x].line[z].alpha || 99),
                      from : c.vtrendlines[x].line[z].startvalue
                          ? c.vtrendlines[x].line[z].startvalue
                          : 0,
                      to : c.vtrendlines[x].line[z].endvalue
                    })
              }
              g.xAxis.plotLines.push({
                    color : convertColor(c.vtrendlines[x].line[z].color
                            || '333333', c.vtrendlines[x].line[z].alpha || 99),
                    value : c.vtrendlines[x].line[z].startvalue
                        ? c.vtrendlines[x].line[z].startvalue
                        : 0,
                    width : c.vtrendlines[x].line[z].thickness
                        ? c.vtrendlines[x].line[z].thickness
                        : 1
                  })
            }
          }
        }
      }
      g.exporting.enabled = c.chart.exportenabled == '1' ? true : false;
      g.exporting.buttons.exportButton.enabled = c.chart.exportshowmenuitem == '0'
          ? false
          : true;
      g.exporting.filename = c.chart.exportfilename
          ? c.chart.exportfilename
          : 'FusionCharts';
      g.exporting.width = e;
      if (c.styles && c.styles.definition instanceof Array
          && c.styles.application instanceof Array) {
        for (j = 0; j < c.styles.definition.length; j += 1) {
          if (typeof FCFCC.supportedStyle[c.styles.definition[j].type] === 'function') {
            tempstyle[c.styles.definition[j].name.toLowerCase()] = c.styles.definition[j]
          }
        }
        for (j = 0; j < c.styles.application.length; j += 1) {
          styleArr = c.styles.application[j].styles.split(',');
          for (l = 0; l < styleArr.length; l += 1) {
            styleName = styleArr[l].toLowerCase();
            if (tempstyle[styleName]) {
              FCFCC.supportedStyle[tempstyle[styleName].type](g,
                  c.styles.application[j].toobject.toLowerCase(),
                  tempstyle[styleName])
            }
          }
        }
      }
      g.chart.borderWidth = c.chart.showborder == '0'
          ? 0
          : (c.chart.borderthickness ? c.chart.borderthickness : 1);
      g.chart.borderColor = convertColor(c.chart.bordercolor || '767575',
          c.chart.borderalpha || 50);
      g.chart.plotBorderColor = convertColor(c.chart.canvasbordercolor
              || '545454', c.chart.canvasborderalpha || 100);
      g.chart.plotBorderWidth = c.chart.canvasborderthickness
          ? c.chart.canvasborderthickness
          : 2;
      g.plotOptions.series.borderColor = convertColor(c.chart.plotbordercolor
              || '333333', c.chart.plotborderalpha || 95);
      g.plotOptions.series.borderWidth = c.chart.showplotborder == '0'
          ? 0
          : (c.chart.plotborderthickness ? c.chart.plotborderthickness : 1);
      g.plotOptions.series.borderRadius = c.chart.useroundedges == '1' ? 5 : 0;
      g.yAxis[0].plotLines.push({
            color : convertColor(c.chart.zeroplanecolor || '717170',
                c.chart.zeroplanealpha || 80),
            value : 0,
            width : c.chart.zeroplanethickness || 2
          });
      addData(c, y, b, g, e, f, d);
      if (y >= 2) {
        ModyfyLegend(g, c)
      }
      if (typeof jsConf[d] === 'object') {
        g = margeClone(g, jsConf[d])
      }
      if (b == 'Marimekko') {
        g.plotOptions.series.pointPadding = 0;
        g.plotOptions.series.groupPadding = 0;
        g.plotOptions.series.shadow = false;
        g.plotOptions.series.dataLabels.y = 12;
        g.tooltip.formatter = function() {
          var x = '', charSep = c.chart.tooltipsepchar;
          x += this.series.name !== ' ' ? this.series.name + charSep : '';
          x += this.x ? this.x + charSep : '';
          if (c.chart.usepercentdistribution != '0') {
            x += (parseInt(this.percentage * 100, 10) / 100) + '%'
          } else {
            x += v(this.y, c.chart, 1)
          }
          return parseStr(x)
        };
        if (c.chart.usepercentdistribution == '0') {
          g.plotOptions.series.stacking = 'normal'
        } else {
          g.plotOptions.series.stacking = 'percent';
          g.yAxis[0].labels.formatter = function() {
            return parseStr(this.value + '%')
          }
        }
        convertMarimeko(g, c, e, f, c.categories)
      }
      g.chart.backgroundColor = r(0, 0, e, f ? f : 400,
          c.chart.bgangle !== undefined ? c.chart.bgangle : 270,
          c.chart.bgcolor ? c.chart.bgcolor : "CBCBCB,E9E9E9", c.chart.bgalpha
              ? c.chart.bgalpha
              : "50,50", c.chart.bgratio ? c.chart.bgratio : "0,100");
      var h, plotY;
      if ('\v' === 'v') {
        h = 0;
        plotY = 0
      } else {
        h = g.chart.margin[3];
        plotY = g.chart.margin[0]
      }
      g.chart.plotBackgroundColor = (s(b) == 'pie')
          ? 'rgba(255,255,255,0)'
          : (r(h, plotY, e - (g.chart.margin[1] + g.chart.margin[3]), (f
                  ? f
                  : 400)
                  - (g.chart.margin[0] + g.chart.margin[2]),
              c.chart.canvasbgangle !== undefined ? c.chart.canvasbgangle : 0,
              c.chart.canvasbgcolor ? c.chart.canvasbgcolor : "FFFFFF",
              c.chart.canvasbgalpha ? c.chart.canvasbgalpha : "100",
              c.chart.canvasbgratio ? c.chart.canvasbgratio : ""));
      return g
    }
    FCC.dataFormat = 'json';
    FCC.render = function(b, c) {
      var d, sender = this, events = {
        loaded : 'FC_Loaded',
        dataloaded : 'FC_DataLoaded',
        rendered : 'FC_Rendered',
        drawcomplete : 'FC_DrawComplete'
      };
      if (FCC.isReady()) {
        d = F.call(this, b.id, true);
        d.chart.events.load = function() {
          setTimeout(function() {
                for (var a in events) {
                  M.raiseEvent(a, {}, sender);
                  try {
                    if (typeof window[events[a]] === 'function') {
                      window[events[a]](sender.id)
                    }
                  } catch (err) {
                    setTimeout(function() {
                          throw err;
                        }, 0)
                  }
                }
              }, 0)
        };
        createChart.call(this, c, d)
      } else {
        renderArray.push([this, b, c])
      }
    };
    FCC.update = function(b, c) {
      var d = this.id, __containerId = this.options.containerElementId, sender = this, HCJson, events = {
        dataloaded : 'FC_DataLoaded',
        drawcomplete : 'FC_DrawComplete'
      };
      if (typeof __containerId !== 'undefined'
          && typeof FCC.items[d] !== 'undefined') {
        if (!c) {
          delete n[d].msgTxt;
          if (this.jsVars) {
            delete this.jsVars.stallLoad;
            delete this.jsVars.LoadError
          }
        }
        HCJson = F.call(this, __containerId);
        if (c) {
          HCJson.plotOptions.series.animation = false
        }
        HCJson.chart.events.load = function() {
          setTimeout(function() {
                for (var a in events) {
                  M.raiseEvent(a, {}, sender);
                  try {
                    if (typeof window[events[a]] === 'function') {
                      window[events[a]](sender.id)
                    }
                  } catch (err) {
                    setTimeout(function() {
                          throw err;
                        }, 0)
                  }
                }
              }, 0)
        };
        createChart.call(this, undefined, HCJson)
      }
    };
    FCC.resize = function() {
      FCC.update.call(this, undefined, true)
    };
    var L = function() {
    };
    L.prototype = {
      "LoadDataErrorText" : 'Error in loading data.',
      "XMLLoadingText" : 'Retrieving Data. Please Wait',
      "InvalidXMLText" : 'Invalid data.',
      "NoDataText" : 'No data to display.',
      "ReadingDataText" : 'Reading Data. Please Wait',
      "ChartNotSupported" : 'Chart Has No Javascript FallBack'
    };
    L.prototype.constructor = L;
    M.addEventListener('Disposed', function(e) {
          delete n[e.sender.id]
        });
    M.addEventListener('BeforeInitialize', function(e) {
          n[e.sender.id] = new L()
        });
    FCC.config = function(a) {
      M.extend(n[this.id], a)
    };
    M.addEventListener('DataLoadRequested', function(a) {
          var b = a.sender;
          if (b.options.renderer !== 'javascript') {
            return
          }
          if (!b.jsVars) {
            b.jsVars = {}
          }
          if (b.ref && typeof b.ref.showChartMessage === 'function') {
            b.jsVars.stallLoad = true;
            b.ref.showChartMessage(n[b.id].XMLLoadingText)
          } else {
            b.jsVars.stallLoad = true
          }
        });
    M.addEventListener('DataLoadRequestCompleted', function(a, b) {
          var c = a.sender;
          if (c.options.renderer !== 'javascript') {
            return
          }
          if (c.jsVars) {
            delete c.jsVars.stallLoad;
            delete c.jsVars.LoadError
          }
        });
    M.addEventListener('DataLoadError', function(a, b) {
          var c = a.sender;
          if (c.options.renderer !== 'javascript') {
            return
          }
          if (!c.jsVars) {
            c.jsVars = {}
          }
          if (c.ref) {
            c.jsVars.LoadError = true;
            c.ref.showChartMessage(n[c.id].LoadDataErrorText)
          } else {
            c.jsVars.LoadError = true
          }
        });
    M.addEventListener('BeforeDispose', function(e) {
          if (e.sender.options.renderer !== 'javascript') {
            return
          }
          removeChart(e.sender.id, true)
        })
  };
  M.renderer.register('javascript', FCC);
  if (/\(iPhone;|\(iPod;|\(iPad;/i.test(navigator.userAgent)) {
    M.renderer.setDefault('javascript')
  }
  M.extend({
        '_fallbackJSChartWhenNoFlash' : function() {
          if (!M.swfobject
              .hasFlashPlayerVersion(M.core.options.requiredFlashPlayerVersion)) {
            M.renderer.setDefault('javascript')
          }
        }
      })
}());
(function() {
  var b = FusionCharts(['private', 'XMLDataHandler']);
  if (b === undefined) {
    return
  }
  var c = function(a) {
    return {
      data : a,
      error : undefined
    }
  };
  b.addDataHandler('XML', {
        encode : c,
        decode : c
      })
}());
if (!this.JSON) {
  this.JSON = {}
}
(function() {
  function f(n) {
    return n < 10 ? '0' + n : n
  }
  if (typeof Date.prototype.toJSON !== 'function') {
    Date.prototype.toJSON = function(a) {
      return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-'
          + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T'
          + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':'
          + f(this.getUTCSeconds()) + 'Z' : null
    };
    String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function(
        a) {
      return this.valueOf()
    }
  }
  var e = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = {
    '\b' : '\\b',
    '\t' : '\\t',
    '\n' : '\\n',
    '\f' : '\\f',
    '\r' : '\\r',
    '"' : '\\"',
    '\\' : '\\\\'
  }, rep;
  function quote(b) {
    escapable.lastIndex = 0;
    return escapable.test(b) ? '"' + b.replace(escapable, function(a) {
          var c = meta[a];
          return typeof c === 'string' ? c : '\\u'
              + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)
        }) + '"' : '"' + b + '"'
  }
  function str(a, b) {
    var i, k, v, length, mind = gap, partial, value = b[a];
    if (value && typeof value === 'object'
        && typeof value.toJSON === 'function') {
      value = value.toJSON(a)
    }
    if (typeof rep === 'function') {
      value = rep.call(b, a, value)
    }
    switch (typeof value) {
      case 'string' :
        return quote(value);
      case 'number' :
        return isFinite(value) ? String(value) : 'null';
      case 'boolean' :
      case 'null' :
        return String(value);
      case 'object' :
        if (!value) {
          return 'null'
        }
        gap += indent;
        partial = [];
        if (Object.prototype.toString.apply(value) === '[object Array]') {
          length = value.length;
          for (i = 0; i < length; i += 1) {
            partial[i] = str(i, value) || 'null'
          }
          v = partial.length === 0 ? '[]' : gap ? '[\n' + gap
              + partial.join(',\n' + gap) + '\n' + mind + ']' : '['
              + partial.join(',') + ']';
          gap = mind;
          return v
        }
        if (rep && typeof rep === 'object') {
          length = rep.length;
          for (i = 0; i < length; i += 1) {
            k = rep[i];
            if (typeof k === 'string') {
              v = str(k, value);
              if (v) {
                partial.push(quote(k) + (gap ? ': ' : ':') + v)
              }
            }
          }
        } else {
          for (k in value) {
            if (Object.hasOwnProperty.call(value, k)) {
              v = str(k, value);
              if (v) {
                partial.push(quote(k) + (gap ? ': ' : ':') + v)
              }
            }
          }
        }
        v = partial.length === 0 ? '{}' : gap ? '{\n' + gap
            + partial.join(',\n' + gap) + '\n' + mind + '}' : '{'
            + partial.join(',') + '}';
        gap = mind;
        return v
    }
  }
  if (typeof JSON.stringify !== 'function') {
    JSON.stringify = function(a, b, c) {
      var i;
      gap = '';
      indent = '';
      if (typeof c === 'number') {
        for (i = 0; i < c; i += 1) {
          indent += ' '
        }
      } else if (typeof c === 'string') {
        indent = c
      }
      rep = b;
      if (b && typeof b !== 'function'
          && (typeof b !== 'object' || typeof b.length !== 'number')) {
        throw new Error('JSON.stringify');
      }
      return str('', {
            '' : a
          })
    }
  }
  if (typeof JSON.parse !== 'function') {
    JSON.parse = function(c, d) {
      var j;
      function walk(a, b) {
        var k, v, value = a[b];
        if (value && typeof value === 'object') {
          for (k in value) {
            if (Object.hasOwnProperty.call(value, k)) {
              v = walk(value, k);
              if (v !== undefined) {
                value[k] = v
              } else {
                delete value[k]
              }
            }
          }
        }
        return d.call(a, b, value)
      }
      c = String(c);
      e.lastIndex = 0;
      if (e.test(c)) {
        c = c.replace(e, function(a) {
              return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)
            })
      }
      if (/^[\],:{}\s]*$/.test(c.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
          '@').replace(
          /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
          ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
        j = eval('(' + c + ')');
        return typeof d === 'function' ? walk({
              '' : j
            }, '') : j
      }
      throw new SyntaxError('JSON.parse');
    }
  }
}());
var fastTrim = function(a) {
  a = a.replace(/^\s\s*/, '');
  var b = /\s/, i = a.length;
  while (b.test(a.charAt(i -= 1))) {
  }
  return a.slice(0, i + 1)
};
(function() {
  var j = FusionCharts(['private', 'JSON_DataHandler']);
  if (j === undefined) {
    return
  }
  var k = function(s) {
    if (s === null || s === undefined || typeof s.toString !== 'function') {
      return ''
    }
    s = s.toString().replace(/&/g, '&amp;').replace(/\'/g, '&#39;').replace(
        /\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
    return s
  };
  var l = (function() {
    var e = {
      arr : {
        set : true,
        trendlines : true,
        vtrendlines : true,
        line : true,
        data : true,
        dataset : true,
        categories : true,
        category : true,
        linkeddata : true,
        application : true,
        definition : true,
        axis : true
      },
      tag : {
        chart : 'linkedchart',
        map : 'linkedmap',
        graph : 'linkedgraph',
        set : 'data',
        vline : {
          chart : 'data',
          graph : 'data',
          dataset : 'data',
          categories : 'category',
          linkedchart : 'data',
          linkedgraph : 'data'
        },
        apply : {
          application : 'application'
        },
        style : {
          definition : 'definition'
        }
      },
      attr : {
        vline : {
          vline : 'true'
        }
      },
      ins : {
        chart : true,
        map : true,
        graph : true
      },
      text : {
        dataset : 'data',
        categories : 'category'
      },
      group : {
        styles : {
          definition : true,
          application : true
        }
      }
    };
    var f = 1, XML_TEXTNODE = 3;
    var g = {
      append : function(a, b, c) {
        if (e.arr[c] === true) {
          if (!(b[c] instanceof Array)) {
            b[c] = []
          }
          b[c].push(a)
        } else {
          b[c] = a
        }
      },
      child : function(a, b, c, d) {
        var i, nodeName, childObj, temp;
        for (i = 0; i < b.length; i += 1) {
          nodeName = b[i].nodeName.toLowerCase();
          if (b[i].nodeType === f) {
            childObj = g.attr(b[i].attributes);
            if (e.ins[nodeName] === true) {
              temp = childObj;
              childObj = {};
              childObj[nodeName] = temp;
              temp = undefined
            }
            if (typeof e.attr[nodeName] === 'object') {
              j.extend(childObj, e.attr[nodeName])
            }
            if (typeof e.tag[nodeName] === 'object'
                && typeof e.tag[nodeName][c] === 'string') {
              nodeName = e.tag[nodeName][c]
            }
            if (typeof e.tag[nodeName] === 'string') {
              nodeName = e.tag[nodeName]
            }
            if (b[i].childNodes.length) {
              if (e.group[c] && e.group[c][nodeName]) {
                g.child(a, b[i].childNodes, nodeName, d)
              } else {
                g.child(childObj, b[i].childNodes, nodeName, d)
              }
            }
            if (!(e.group[c] && e.group[c][nodeName])) {
              g.append(childObj, a, nodeName)
            }
          } else if (b[i].nodeType === XML_TEXTNODE && d.chart
              && parseInt(d.chart.compactdatamode, 10)
              && typeof e.text[c] === 'string') {
            nodeName = e.text[c];
            childObj = b[i].data;
            g.append(childObj, a, nodeName)
          }
        }
      },
      attr : function(a) {
        var i, obj = {};
        if (!a || !a.length) {
          return obj
        }
        for (i = 0; i < a.length; i += 1) {
          obj[a[i].nodeName.toLowerCase()] = a[i].nodeValue
        }
        return obj
      }
    };
    var h = function(a) {
      var b = {}, xmlDoc, root, rootName;
      if (a === undefined || a === null || typeof a.toString !== 'function') {
        h.errorObject = new TypeError('xml2json.parse()');
        return b
      }
      a = a.toString().replace(/<\!--[\s\S]*?-->/g, '').replace(
          /<\?xml[\s\S]*?\?>/ig, '').replace(/&(?!([^;\n\r]+?;))/g, '&amp;$1');
      a = fastTrim(a);
      if (!a) {
        return b
      }
      if (window.DOMParser) {
        xmlDoc = (new window.DOMParser()).parseFromString(a, "text/xml")
      } else {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(a)
      }
      if (!(xmlDoc.childNodes.length === 1 && (root = xmlDoc.childNodes[0])
          && root.nodeName && (rootName = root.nodeName.toLowerCase()) && (rootName === 'chart'
          || rootName === 'map' || rootName === 'graph'))) {
        h.errorObject = new TypeError('xml2json.parse()');
        return b
      }
      b[rootName] = g.attr(root.attributes);
      if (root.childNodes) {
        g.child(b, root.childNodes, rootName, b)
      }
      delete h.errorObject;
      return b
    };
    return function(a) {
      delete h.errorObject;
      var b = h(a);
      return {
        data : b,
        error : h.errorObject
      }
    }
  }());
  var m = (function() {
    var d = {
      items : {
        explode : {
          data : 'set'
        },
        attr : {
          chart : {
            chart : 'chart',
            graph : 'chart'
          },
          graph : {
            graph : 'graph',
            chart : 'graph'
          },
          map : {
            map : 'map'
          },
          linkedchart : {
            chart : 'chart',
            graph : 'graph',
            map : 'map'
          }
        },
        group : {
          styles : {
            definition : 'style',
            application : 'apply'
          }
        }
      },
      qualify : function(a, b, c) {
        c = c.toLowerCase();
        return typeof this.items[a][c] === 'object' ? this.items[a][c][b
            .toLowerCase()] : this.items[a][c]
      }
    };
    var f = function(a, b) {
      var c = '', innerXML = '', nodeName = '', outerXML = '', item, qualifier;
      if (a instanceof Array) {
        for (item = 0; item < a.length; item += 1) {
          if (typeof a[item] === 'string') {
            outerXML += k(a[item])
          } else {
            outerXML += f(a[item], b)
          }
        }
      } else {
        for (item in a) {
          if (a[item] instanceof Array
              && (qualifier = d.qualify('group', item, b))) {
            innerXML += '<' + item + '>' + f(a[item], qualifier) + '</' + item
                + '>'
          } else if (typeof a[item] === 'object') {
            if ((qualifier = d.qualify('attr', item, b))) {
              nodeName = f(a[item], qualifier).replace(/\/\>/ig, '');
              b = item
            } else {
              innerXML += f(a[item], item)
            }
          } else {
            if (item.toLowerCase() === 'vline' && Boolean(a[item])) {
              b = 'vLine'
            } else {
              c += ' ' + item + '=\"'
                  + k(a[item]).toString().replace(/\"/ig, '&quot;') + '\"'
            }
          }
        }
        if ((qualifier = d.qualify('explode', item, b))) {
          b = qualifier
        }
        outerXML = (nodeName !== '' ? nodeName : '<' + b) + c
            + (innerXML !== '' ? '>' + innerXML + '</' + b + '>' : ' />')
      }
      return outerXML
    };
    return function(a) {
      delete f.errorObject;
      if (a && typeof a === 'string') {
        try {
          a = JSON.parse(a)
        } catch (e) {
          f.errorObject = e
        }
      }
      var b = f(a, a && a.graph ? 'graph' : 'chart');
      return {
        data : b,
        error : f.errorObject
      }
    }
  }());
  j.addDataHandler('JSON', {
        encode : function(a) {
          return m(a)
        },
        decode : function(a) {
          return l(a)
        }
      })
}());
(function() {
  var f = FusionCharts(['private', 'LinkManager']);
  if (f === undefined) {
    return
  }
  f.policies.link = ['link', undefined];
  var g = {};
  var h = function(a, b) {
    this.items = {};
    this.root = a;
    this.parent = b;
    if (b instanceof f.core) {
      this.level = this.parent.link.level + 1
    } else {
      g[a.id] = [{}];
      this.level = 0
    }
  };
  h.prototype.configuration = function() {
    var a = g[this.root.id][this.level] || (g[this.root.id][this.level] = {});
    if (typeof a.id === 'undefined') {
      a.id = g[this.root.id][this.level].id = f.uniqueId()
    }
    return a
  };
  f.extend({
        configureLink : function(a, b) {
          if (a instanceof Array) {
            for (var i = 0; i < a.length; i += 1) {
              if (typeof g[this.link.root.id][i] !== 'object') {
                g[this.link.root.id][i] = {}
              }
              f.extend(g[this.link.root.id][i], a[i])
            }
            g[this.link.root.id].splice(a.length)
          } else if (typeof a === 'object') {
            if (typeof b !== 'number') {
              b = this.link.level
            }
            if (g[this.link.root.id][b] === undefined) {
              g[this.link.root.id][b] = {}
            }
            f.extend(g[this.link.root.id][b], a)
          } else {
            f.raiseError(this, '25081731', 'param', '~configureLink()',
                'Unable to update link configuration from set parameters')
          }
        }
      }, true);
  f.addEventListener('BeforeInitialize', function(a) {
        if (!(a.sender.link instanceof h)) {
          a.sender.link = new h(a.sender)
        } else {
          if (a.sender.link.parent instanceof f.core) {
            a.sender.link.parent.link.items[a.sender.id] = a.sender
          }
        }
      });
  f.addEventListener('LinkedChartInvoked', function(a, b) {
    var c = a.sender, param = c.clone({
          dataSource : b.data,
          dataFormat : b.linkType === 'URL'
              ? FusionChartsDataFormats.XMLURL
              : b.linkType,
          link : new h(c.link.root, c)
        }, true);
    if (c.args && parseInt(c.args.animate, 10) !== 0) {
      delete param.animate
    }
    f.extend(param, c.link.configuration());
    f.raiseEvent('BeforeLinkedItemOpen', {
          level : c.link.level
        }, c.link.root);
    if (f.core.items[param.id] instanceof f.core && param.strictLinkId === true) {
      f.core.items[param.id].dispose()
    }
    var d = new f.core(param).render();
    f.raiseEvent('LinkedItemOpened', {
          level : c.link.level,
          item : d
        }, c.link.root)
  });
  f.addEventListener('OverlayButtonClick', function(a) {
        var b = a.sender, level = b.link.level - 1, parent = b.link.parent;
        f.raiseEvent('BeforeLinkedItemClose', {
              level : level,
              item : b
            }, b.link.root);
        b.dispose();
        f.raiseEvent('LinkedItemClosed', {
              level : level
            }, b.link.root);
        if (!parent.isActive()
            && b.options.containerElement === parent.options.containerElement
            && b.options.insertMode === 'replace') {
          parent.render()
        }
      });
  f.addEventListener('Loaded', function(a) {
        var b = a.sender;
        if (!b || b.link === undefined) {
          return
        }
        if (b.link.root === b || !(b.link.parent instanceof f.core)) {
          return
        }
        if (!(b.ref && typeof b.ref.drawOverlayButton === 'function')) {
          f.raiseWarning(b, '04091602', 'run', '::LinkManager^Loaded',
              'Unable to draw overlay button on object. -' + b.id);
          return
        }
        var c = f.extend({
              show : true
            }, b.link.parent.options.overlayButton);
        f.extend(c, b.link.parent.link.configuration().overlayButton || {});
        b.ref.drawOverlayButton(c)
      });
  f.addEventListener('BeforeDispose', function(e) {
        var a = e.sender;
        if (!(a && a.link instanceof h)) {
          return
        }
        if (a.link.parent instanceof f.core) {
          delete a.link.parent.link.items[e.sender.id]
        }
        delete g[a.id]
      });
  FusionChartsEvents.LinkedItemOpened = 'linkeditemopened';
  FusionChartsEvents.BeforeLinkedItemOpen = 'beforelinkeditemopen';
  FusionChartsEvents.LinkedItemClosed = 'linkeditemclosed';
  FusionChartsEvents.BeforeLinkedItemClose = 'beforelinkeditemclose'
}());
(function() {
  var j = FusionCharts(['private', 'PrintManager']);
  if (j === undefined) {
    return
  }
  var k = {
    enabled : false,
    invokeCSS : true,
    processPollInterval : 2000,
    message : 'Chart is being prepared for print.',
    useExCanvas : false,
    bypass : false
  };
  var l = {
    getCanvasElementOf : function(a, b, c) {
      if (a.__fusioncharts__canvascreated !== true) {
        var d = document.createElement('canvas'), identifier = j.core.items[a.id].attributes['class'];
        if (k.useExCanvas && G_vmlCanvasManager) {
          G_vmlCanvasManager.initElement(d)
        }
        d.setAttribute('class', identifier);
        d.__fusioncharts__reference = a.id;
        a.parentNode.insertBefore(d, a.nextSibling);
        a.__fusioncharts__canvascreated = true
      }
      a.nextSibling.setAttribute('width', b || a.offsetWidth || 2);
      a.nextSibling.setAttribute('height', c || a.offsetHeight || 2);
      return a.nextSibling
    },
    removeCanvasElementOf : function(a) {
      if (a.__fusioncharts__canvascreated !== true || !a.parentNode
          || a.parentNode === null) {
        return
      }
      a.parentNode.removeChild(a.nextSibling);
      a.__fusioncharts__canvascreated = false
    },
    rle2rgba : function(a, c, d) {
      if (typeof d !== 'string') {
        d = "FFFFFF"
      }
      var e = a.split(/[;,_]/), run, i, r, g, b, x = 0;
      for (i = 0; i < e.length; i += 2) {
        if (e[i] === '') {
          e[i] = d
        }
        e[i] = ('000000' + e[i]).substr(-6);
        r = parseInt('0x' + e[i].substring(0, 2), 16);
        g = parseInt('0x' + e[i].substring(2, 4), 16);
        b = parseInt('0x' + e[i].substring(4, 6), 16);
        for (run = 0; run < e[i + 1]; run += 1) {
          c[x] = r;
          c[x + 1] = g;
          c[x + 2] = b;
          c[x + 3] = 255;
          x += 4
        }
      }
      return c
    },
    rle2array : function(a, b) {
      if (typeof b !== 'string') {
        b = "FFFFFF"
      }
      var c = a.split(';'), run, i;
      for (run in c) {
        c[run] = c[run].split(/[_,]/);
        for (i = 0; i < c[run].length; i += 2) {
          c[run][i] = c[run][i] === '' ? b : ('000000' + c[run][i]).substr(-6)
        }
      }
      return c
    },
    drawRLE : function(a, b, c, d, e) {
      c = c || 2;
      d = d || 2;
      a.setAttribute('width', c);
      a.setAttribute('height', d);
      var f = a.getContext('2d'), imageData;
      if (typeof f.putImageData === 'function'
          && typeof f.createImageData === 'function') {
        imageData = f.createImageData(c, d);
        l.rle2rgba(b, imageData.data, e);
        f.putImageData(imageData, 0, 0)
      } else {
        imageData = l.rle2array(b, e);
        var x = 0, y = 0, z = 0;
        for (y in imageData) {
          x = 0;
          for (z = 0; z < imageData[y].length; z += 2) {
            f.fillStyle = "#" + imageData[y][z];
            f.fillRect(x, y, imageData[y][z + 1], 1);
            x += parseInt(imageData[y][z + 1], 10)
          }
        }
      }
      return true
    },
    drawText : function(a, b, c, d) {
      var e = a.getContext('2d'), w = c || 2, h = d || 2;
      e.clearRect(0, 0, w, h);
      e.textBaseline = 'middle';
      e.textAlign = 'center';
      e.font = '8pt verdana';
      e.fillStyle = '#776666';
      if (typeof e.fillText === 'function') {
        e.fillText(b, w / 2, h / 2)
      } else if (typeof e.mozDrawText === 'function') {
        e.translate(w / 2, h / 2);
        e.mozDrawText(b)
      } else {
        j.raiseWarning(j.core, '25081803', 'run',
            '::PrintManager>lib.drawText',
            'Canvas text drawing is not supported in browser')
      }
      return true
    },
    appendCSS : function(a) {
      var b = document.createElement('style');
      b.setAttribute('type', 'text/css');
      if (typeof b.styleSheet === 'undefined') {
        b.appendChild(document.createTextNode(a))
      } else {
        b.styleSheet.cssText = a
      }
      return document.getElementsByTagName('head')[0].appendChild(b)
    }
  };
  var m = {
    styles : {
      print : 'canvas.FusionCharts{display:none;}@media print{object.FusionCharts{display:none;}canvas.FusionCharts{display:block;}}',
      error : 'canvas.FusionCharts{display:none;}',
      normal : ''
    },
    cssNode : undefined,
    invoke : function(a) {
      if (typeof this.styles[a] !== 'undefined') {
        a = this.styles[a]
      }
      if (typeof a !== 'undefined') {
        if (this.cssNode !== undefined && this.cssNode.parentNode !== undefined) {
          this.cssNode.parentNode.removeChild(this.cssNode)
        }
        m.cssNode = l.appendCSS(a)
      }
    }
  }, activeItems = {}, queuedItems = {}, activeCount = 0, queueTrigger;
  var n = function(a) {
    var b = a.sender.ref, w, h;
    if (b === undefined || typeof b.prepareImageDataStream !== 'function'
        || b.prepareImageDataStream() === false) {
      queueTrigger(a.sender);
      return
    }
    if (!activeItems[a.sender.id]) {
      activeItems[a.sender.id] = b;
      activeCount += 1;
      if (activeCount === 1) {
        j.raiseEvent('PrintReadyStateChange', {
              ready : false,
              bypass : k.bypass
            }, a.sender)
      }
    }
    try {
      w = b.offsetWidth;
      h = b.offsetHeight;
      l.drawText(l.getCanvasElementOf(b, w, h), k.message, w, h)
    } catch (e) {
      m.invoke('error');
      j.raiseError(a.sender, '25081807', 'run',
          '::PrintManager>onDrawComplete',
          'There was an error while showing message to user via canvas.')
    }
  }, onImageStreamReady = function(a, b) {
    try {
      if (l.drawRLE(l.getCanvasElementOf(a.sender.ref, b.width, b.height),
          b.stream, b.width, b.height, b.bgColor) === true) {
        if (activeItems[a.sender.id]) {
          delete activeItems[a.sender.id];
          activeCount -= 1;
          if (activeCount === 0) {
            j.raiseEvent('PrintReadyStateChange', {
                  ready : true,
                  bypass : k.bypass
                }, a.sender)
          }
        }
      }
    } catch (e) {
      m.invoke('error');
      j.raiseError(a.sender, '25081810', 'run',
          '::PrintManager>onImageStreamReady',
          'There was an error while drawing canvas.')
    }
  }, onBeforeDispose = function(a) {
    l.removeCanvasElementOf(a.sender.ref)
  }, subscribeToEvents = function(a) {
    var b = a ? 'addEventListener' : 'removeEventListener';
    j.core[b]('ImageStreamReady', onImageStreamReady);
    j.core[b]('DrawComplete', n);
    j.core[b]('BeforeDispose', onBeforeDispose)
  }, initialize = function() {
    if (k.invokeCSS === true) {
      m.invoke('print')
    }
    for (var a in j.core.items) {
      queueTrigger(j.core.items[a]);
      queueTrigger()
    }
  }, destroy = function() {
    m.invoke('error');
    for (var a in j.core.items) {
      if (j.core.items[a].ref === undefined) {
        continue
      }
      l.removeCanvasElementOf(j.core.items[a].ref)
    }
    m.invoke('normal')
  };
  queueTrigger = function(a) {
    if (a instanceof j.core) {
      queuedItems[a.id] = a;
      return
    }
    for (var b in queuedItems) {
      n({
            sender : queuedItems[b]
          }, {});
      delete queuedItems[b]
    }
  };
  j.extend({
    printManager : {
      configure : function(a) {
        j.extend(k, a || {})
      },
      isReady : function() {
        if (k.bypass) {
          return true
        }
        if (activeCount > 0 || !k.enabled) {
          return false
        }
        var a, ref;
        for (a in j.core.items) {
          if ((ref = j.core.items[a].ref) === undefined) {
            continue
          }
          if (ref.hasRendered && ref.hasRendered() === false) {
            return false
          }
        }
        return true
      },
      enabled : function(a) {
        if (a === undefined) {
          return k.enabled
        }
        if ('\v' === 'v'
            || j.renderer.currentRendererName() !== 'flash'
            || typeof document.createElement('canvas').getContext !== 'function') {
          k.bypass = true;
          j.raiseEvent('PrintReadyStateChange', {
                ready : true,
                bypass : k.bypass
              });
          j.raiseWarning(j.core, '25081816', 'run', '.printManager.enabled',
              'printManager is not compatible with your browser');
          return k.enabled
        }
        k.bypass = false;
        subscribeToEvents(a);
        if (a === true) {
          initialize()
        } else {
          destroy()
        }
        return (k.enabled = a)
      },
      managedPrint : function() {
        if (k.bypass) {
          window.print();
          return
        }
        if (!j.core.printManager.isReady()) {
          if (j.core.printManager.enabled(true) !== true) {
            window.print();
            return
          }
          j.addEventListener('PrintReadyStateChange',
              j.core.printManager.managedPrint);
          return
        }
        if (typeof arguments[1] === 'object' && arguments[1].ready !== true) {
          return
        }
        j.removeEventListener('PrintReadyStateChange',
            j.core.printManager.managedPrint);
        window.print()
      }
    }
  }, false);
  FusionChartsEvents.PrintReadyStateChange = 'printreadystatechange'
}());